gpt4 book ai didi

loops - SAS 组合数据集、二进制搜索、索引

转载 作者:行者123 更新时间:2023-12-02 02:04:54 25 4
gpt4 key购买 nike

在 SAS 中,对于下面的两个测试数据集 - 对于落在“y”和“z”范围内的“amount”的每个值,我需要提取相应的“x”。可能有多个符合标准的“x”值。最终结果应如下所示:

/*
4 banana eggs
15 .
31 .
7 banana
22 fig
1 eggs
11 coconut
17 date
41 apple
*/

我意识到这依赖于使用索引或二进制搜索,但我想不出一个可行的解决方案!任何帮助将不胜感激!谢谢!

data test1;
input x $ y z;
datalines;
apple 29 43
banana 2 7
coconut 9 13
date 17 20
eggs 1 5
fig 18 26
;
run;

data test2;
input amount;
datalines;
4
15
31
7
22
1
11
17
41
;
run;

最佳答案

连接两个数据集,使 amount 介于 yz 之间。

proc sql;
create table join as
select a.amount
,b.*
from test2 a
left join
test1 b
on a.amount between b.y and b.z;
quit;

按数量对结果进行转置排序。

proc sort data=join; by amount; run;

转置它。

proc transpose data=join out=trans;
by amount;
var x;
run;

现在您的每个水果都在其自己的名为 col1col2 的变量中,...如果您希望将它们全部放在一个由空格分隔的变量中,只需将它们连接起来即可。

data trans2(keep= amount text);
set trans(drop=_name_);
array v{*} _character_;
text = catx(' ', of v{*});
run;

关于loops - SAS 组合数据集、二进制搜索、索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15509330/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com