sas code_pick在更改之后立即填写列

时间:2014-04-24 13:08:17

标签: sas

这是我拥有的表格,如果人员相同,我需要选择,代码应该是“CA”,街道线应该更改为下一列。它是WC-WC-EC,所以我需要选择EC列。所以我把星星放在他们应该选择的列上。

 person code date    street_line;
 2     CA    11JAN10  wc ;
 2    CA     10JAN10  WC;
**2   CA     10JAN10  EC** ;
 2    MA     3jan10   TM;
 3    CA     20FEB07  EC ;
 3    CA     20FEB07  EC;
**3   CA     24MAR09  WP;**
 4    CA     2JUN08   WP;
 4    CA     12JUN08  WP;

2 个答案:

答案 0 :(得分:0)

使用FIRST和NOTSORTED,您可以识别变量的变化。在这种情况下,我们会在未发生人员或代码更改(first.street_line)时识别street_line(not first.code)的更改。变化总是向下传播,因此人员的变化也会是代码和street_line的变化,因此需要检查。

data want;
set have;
by person code street_line notsorted;
if first.street_line and not first.code then flag=1;
run;

答案 1 :(得分:0)

您可以使用lag()函数从上一行获取值。

data want ;
  set have ;
  by person ;
  lag_Street = lag(street_line) ;

  if not first.person and code = 'CA' and street_line ^= lag_Street then output ;
run ;

如果它是person的第一条记录,则无法确定street的值是否已更改,因为之前的值没有person

因此,not first.personperson开始仅选择第二条记录,说明code = 'CA'必须为true,street_line ^= lag_Street检查street_line是否为{{1}} } value与前一行不同。