我尝试通过SAS指南使用循环(通过PROC LOOP),只要特定列的值发生变化,就可以使用增量ID创建新列。
仅举例来说,我正在寻找类似的东西:
Date | Name | Status | ID ------------------------------------------ 20150101 | Tiago | Single | 1 20150102 | Tiago | Single | 1 20150103 | Tiago | Married | 2 20150104 | Tiago | Divorced | 3 20150105 | Tiago | Divorced | 3 20150106 | Tiago | Married | 4
在这种情况下,新列将是ID,只要状态沿记录更改,它就会递增。有了这个,我可以按名称分组,查看及时发生的每一个变化(即使它们被重复)。
答案 0 :(得分:2)
这个问题似乎有点困惑。如果原始数据已经与提供的样本数据一起排序,则可以执行这样的数据步骤。
data new;
set test;
by status notsorted;
if first.status then id + 1;
run;
notsorted选项用于保留原始数据。 first.status将首次出现状态为True。 id + 1是摘要声明。摘要语句中的变量未初始化为缺失。
顺便问一下,什么是PROC LOOP?
答案 1 :(得分:0)
扩展Dajun的答案,按名称分组。
/* Sort so that name forms groups and id will go in date order */
proc sort data = test;
by name date;
run;
data want;
set test;
/* Tell SAS we want to know when the value of name or status changes */
by name status notsorted;
/* Reset the ID for each group */
if first.name then id = 0;
/* iterate the ID as per DaJun */
if first.status then id + 1;
run;