SAS - 在列值不变时执行循环

SAS - Do a loop while a column value doesn't change

我正在尝试通过 SAS guide 使用循环(通过 PROC LOOP)在特定列的值发生变化时创建一个具有增量 ID 的新列。

举个例子,我正在寻找这样的东西:

日期 |名称 |状态 | ID
------------------------------------------
20150101 |蒂亚戈 |单身 | 1个

20150102 |蒂亚戈 |单身 | 1个

20150103 |蒂亚戈 |已婚 | 2个

20150104 |蒂亚戈 |离婚 | 3个

20150105 |蒂亚戈 |离婚 | 3个

20150106 |蒂亚戈 |已婚 | 4个

在这种情况下,新列将是 ID,只要记录的状态发生变化,该 ID 就会递增。这样我就可以按名称分组,以查看及时发生的每个更改(即使它们重复)。

这个问题好像有点糊涂。如果原始数据已经使用提供的示例数据进行排序,则可以执行这样的数据步骤。

data new;
    set test;
    by status notsorted;
    if first.status then id + 1;
run;

notsorted选项用于保留原始数据。 first.status 状态的首次出现将为 True。 id + 1 是一个总结语句。汇总语句中的变量未初始化为缺失

顺便问一下,什么是 PROC LOOP?

扩展 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;