全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1141 6
2018-04-14
请教前辈:
    有2个数据集,A数据集有a1--a9个变量(观测非常多千万个),B数据集只有一组观测,但变量很多,比如b1--b40。
    我想得到:
array as1{9} A1-A9;
array as2{40} &b1-&b40;
array as3{9} c1-c9;
do i1=1 to 9;
do i2=1 to 40;
if as1{i1}=as2{i2} then as3{i1}=i2;      
end;                                                   
end;

如果将2个数据集并接,再用数组可得到,但时间非常长。用宏不对。请教前辈有什么好方法!!谢谢!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2018-4-14 21:15:57
我个人感觉哈

看来你长表的pdv + array循环是避免不了的,在此基础上,我感觉方法有俩:
1. 把宽表的全部值用逗号catx先行写到宏变量中,再利用which函数指出位置
2. 利用hash table把宽表写到内存中(值放到key,_n_放到value),去检索它

宽表中最好不要有重复值,如果有,第一个方法可能还行,第二个方法可能搞不定
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2018-4-14 21:37:37
复制代码
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2018-4-14 23:48:47
非常感谢2位前辈的回复指教!
特别感谢 Tigflanker ,您的Way1方法简单明了,我以用上了。
再请教:如果变换成下面的数组:
array as1{9} A1-A9;
array as2{40} &b1-&b40;
array as3{9} c1-c9;
do i1=1 to 9;
do i2=1 to 40;
if as1{i1}=i2  then as3{i1}=as2{i2};      
end;                                                   
end;
该如何改动程序,谢谢!!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2018-4-15 16:22:50
l6397 发表于 2018-4-14 23:48
非常感谢2位前辈的回复指教!
特别感谢 Tigflanker ,您的Way1方法简单明了,我以用上了。
再请教:如果变 ...
复制代码
没特别理解你想询问的点在哪里。

假如我理解,你就想通过数组去做,或者只想知道数组运作哪里有问题,请参见如上代码。
不过这种方式需要第一步把你40个变量merge到长数据集,效率会极其低。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2018-4-15 16:42:59
复制代码
是这意思?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群