条件变量值的修改
假设有如下数据集:
data DB;
input Id :$20. flag1 flag2;
cards;
0001 0 1
0001 0 0
0001 1 0
0001 0 0
0001 0 0
0001 0 0
0002 0 1
0003 1 1
;
当first.ID = 1时,Flag2将被赋值。
有没有办法得到下列结果?
data DB1;
input Id :$20. flag1 flag2;
cards;
0001 0 0
0001 0 0
0001 1 0
0001 0 0
0001 0 0
0001 0 0
0002 0 1
0003 1 0
;
换句话说,flag2 = 1当且仅当first.ID存在且该ID从未出现过flag1 = 1。
先行致谢。
解决方案
你可以使用一个简单的合并。使用WHERE= 数据集选项来获取FLAG1为 TRUE的 ID值集合,并使用IN= 数据集选项。然后将其与完整的数据集进行合并。
data want;
merge db(in=in1 where=(flag1)) db;
by id;
flag2 = first.id and not in1 ;
run;
请注意,在MERGE语句中对DB的两个引用的顺序很重要,以确保数据步骤中使用的FLAG1的值来自DB的完整版本。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。