全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
5368 4
2017-01-10
data ta;
   input num dpd  repcnt c;
   cards ;
6 0 1 1
6 0 2 3
6 0 3 0
6 1 0 1
6 1 1 1
6 1 2 1
9 0 1 0
9 0 9 3
9 1 0 1
9 1 3 2
9 3 0 0
9 3 2 1
;
run;
data tb;
  input numx dpdx  repcntx x y ;
  cards;
6 0 1 12 3000
6 1 2 9  4000
9 0 9 10 5000
9 1 3 3  8000
9 3 2 5  9000
;
run;
/*现在需要对tb数据集进行操作,每一条记录根据numx dpdx repcntx的取值分别与数据集ta的num dpd  repcnt变量取值进行比对,从而获得相应c的取值,用于计算新变量z,计算公式为z=sum(cx,(c-repcnt)*y);  */
/*考虑到ta数据集实际上充当比对功能,其记录可能有上白条,而数据集tb可能记录更多,可否将数据集ta变成相应的宏变量,在数据集tb中引用,每一条记录逐一判断,从而得到新变量z加入数据集tb中*/
二维码

扫码加我 拉你入群

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

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

全部回复
2017-1-10 15:13:57
proc sql;
   create table new as select
  sum(a.c*b.x,(a.c-a.repcnt)*b.y) as z
from ta as a,tb as b
where a.num=b.numx and a.dpd=b.dpdx and a.repcnt=b.repcntx;
quit;
这样或许可以使用
二维码

扫码加我 拉你入群

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

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

2017-1-10 18:02:42
谢谢,但问题是,第一个表相当于参数表,第二个表需要调用进行循环,数据集大的时候存在多对多匹配,因此考虑使用call symput函数将第一个数据集变成代下标的宏变量,从而可以在另一个数据集中进行循环引用衍生其他计算
二维码

扫码加我 拉你入群

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

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

2017-1-11 11:48:57
Call symput
二维码

扫码加我 拉你入群

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

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

2017-1-23 14:27:32
的确可以使用call symput 但问题是由于把数据集变成了宏参,后期调用运行会出现内存不足
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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