【发布时间】:2016-08-10 08:39:44
【问题描述】:
我有以下两个sas数据集:
data have ;
input a b;
cards;
1 15
2 10
3 40
4 200
1 25
2 15
3 10
4 75
1 1
2 99
3 30
4 100
;
data ref ;
input x y;
cards;
1 10
2 20
3 30
4 100
;
我想要以下数据集:
data want ;
input a b outcome ;
cards;
1 15 0
2 10 1
3 40 0
4 200 0
1 25 0
2 15 1
3 10 1
4 75 1
1 1 1
2 99 0
3 30 1
4 100 1
;
我想创建一个变量“结果”,它由 if 语句根据变量 a、b、x 和 y 的条件生成。实际上,“拥有”数据集非常大,我想避免排序并将两个数据集合并在一起(其中 a = x)。
我正在尝试通过以下代码使用宏变量:
data _null_ ;
set ref ;
call symput('listx', x) ;
call symput('listy', y) ;
run ;
data want ;
set have ;
if a=&listx and b le &listy then outcome = 1 ; else outcome = 0 ;
run ;
但这并没有产生预期的结果:
data want ;
input a b outcome ;
cards;
1 15 0
2 10 1
3 40 0
4 200 0
1 25 0
2 15 1
3 10 1
4 75 1
1 1 1
2 99 0
3 30 1
4 100 1
;
【问题讨论】:
-
您的参考数据集有多大?
proc format可以是个好盟友 -
“ref”数据集只有 72 个观察值。 “拥有”数据集超过 8Gb。
标签: if-statement sas sas-macro