如果单个变量中的第一个语句是SAS,则使用

时间:2016-09-20 21:08:45

标签: sorting sas

您好:我有个问题。 我有一个像这样的sas数据集:

data a;
input id $ a b ;
cards;
ddd 12  1
ddd 22  1
ddd 44  2
ddd 50  1
ddd 52  1
ddd 88  2
;run;

我希望我可以先使用这个标志遮蔽湖泊:

data a;
input id $ a b flag $;
cards;
ddd 12  1  Y
ddd 22  1  
ddd 44  2  Y
ddd 50  1  Y
ddd 52  1  
ddd 88  2  Y
;run;

为了做到这一点,我按ID,a,b对数据集进行排序,并尝试使用first.b来创建标记。但它用Y标记了所有的障碍物。我认为这可能是我在之前排序的原因。但是为了保持数据集的顺序,我必须用a,b对它进行排序。所以,我的问题是如何保持订单并使用first.b来创建标志? 感谢。

2 个答案:

答案 0 :(得分:1)

我假设您将set by a b;first.b结合使用。 first.b在这种情况下不起作用的原因是因为first.b对于一个组中 em 的第一个值是真的,并且在这种情况下有每个a中只有一个b。

这个替代方案应该有效,它保留了b的先前值并且每次都检查它。

data flagged (drop=prev_b);
 set a;
 retain prev_b;
 if b ne prev_b then flag='Y';
 output;
 prev_b=b;
run;

答案 1 :(得分:1)

您只需使用NOTSORTED语句中的BY选项,以便SAS设置FIRST。最后。希望他们的旗帜。

data want ;
  set a ;
  by id b notsorted;
  flag = first.b ;
run;

enter image description here