在SAS中指示符变量首次从1变为0后,保持数据行具有相同的唯一ID

在SAS中指示符变量首次从1变为0后,保持数据行具有相同的唯一ID,sas,Sas,我需要有关SAS代码的帮助,该代码将在满足特定条件后保留具有相同唯一ID的数据行。例如,如果我有一个名为BASE的数据集,如下所示 Account_Number Default_Indicator 1010 0 1010 0 1010 1 1010 1 1010 1 1010 0 1010 0 1010 0 1010

我需要有关SAS代码的帮助,该代码将在满足特定条件后保留具有相同唯一ID的数据行。例如,如果我有一个名为BASE的数据集,如下所示

Account_Number  Default_Indicator
1010            0
1010            0
1010            1
1010            1
1010            1
1010            0
1010            0
1010            0
1010            1
1010            1
1020            0
1020            0
1020            0
1020            1
1020            1
1020            1
1020            0
1020            0
1020            1
1020            1
Account_Number  Default_Indicator
1010            0
1010            0
1010            0
1010            1
1010            1
1020            0
1020            0
1020            1
1020            1
我希望最终的数据集在默认_指示符第一次从1变为0后保留行,如下所示

Account_Number  Default_Indicator
1010            0
1010            0
1010            1
1010            1
1010            1
1010            0
1010            0
1010            0
1010            1
1010            1
1020            0
1020            0
1020            0
1020            1
1020            1
1020            1
1020            0
1020            0
1020            1
1020            1
Account_Number  Default_Indicator
1010            0
1010            0
1010            0
1010            1
1010            1
1020            0
1020            0
1020            1
1020            1

非常感谢您的帮助。

您可以使用“按组处理”,只需将NOTSORTED关键字添加到BY语句中即可。使用LAG()函数访问上一个数据步骤迭代中的值。保留指示已找到1->0转换的标志变量。请确保在启动新帐户时重置

data have;
  row+1;
  input Account_Number Default_Indicator @@ ;
cards;
1010  0 1010  0
1010  1 1010  1 1010  1
1010  0 1010  0 1010  0
1010  1 1010  1
1020  0 1020  0 1020  0
1020  1 1020  1 1020  1
1020  0 1020  0
1020  1 1020  1
;

data want ;
  set have;
  by account_number default_indicator notsorted;
  lag_indicator=lag(default_indicator);
  if first.account_number then call missing(found,lag_indicator);
  if first.default_indicator and default_indicator=0 and lag_indicator=1 then found+1;
  if found then output;
  drop lag_indicator found;
run;
结果(不含DROP语句)


你好,戈登,谢谢我已经删除了SQL标记非常感谢你,汤姆,这段代码很有效,我真的很感谢你的帮助!