SAS存储值临时阵列



当状态为PROBATION时,我想将ID的值存储在数组中。之后,我想在表中查找数组中的字段ID,以创建它们的新记录。状态已更改(我想保留原始记录和新记录(

data have;
input agreement  $10.      id         status$15.    ;
datalines;
0002255                         1       PROBATION   
0002255                         2       NORMAL      
0007777                         3       NORMAL    
0007777                         4       NORMAL    
0007777                         5       NORMAL      
0008888                         6       PROBATION   
0008888                         7       NORMAL      
0008888                         8       NORMAL      
run;
data want (drop=i);
set have;
/* by agreement;*/
output;
j=0;
i=0;
retain j;
retain i;
array ids [1000] _temporary_;
array var {1} id ;

if status='PROBATION' then
do;
i + 1;
ids{i}=id;
%put ids{i};
end;


if id=ids{j} then
do;
j+1;
status='OTHER';
output;
end;
run;
```
What I have
agreement   id  status      day
0002255    0  NORMAL       3
0002255    1  PROBATION    4
0002255    2  NORMAL      14
0007777    3  NORMAL      23
0007777    4  NORMAL       8
0007777    5  NORMAL       9
0008888    6  PROBATION   11
0008888    7  NORMAL      12
0008888    8  NORMAL       5
What I  Want
agreement   id  status      day
0002255    0  NORMAL       3
0002255    1  OTHER        3
0002255    1  PROBATION    4
0002255    2  NORMAL      14
0007777    3  NORMAL      23
0007777    4  NORMAL       8
0007777    5  NORMAL       9
0007777    5  OTHER        9
0008888    6  PROBATION   11
0008888    7  NORMAL      12
0008888    8  NORMAL       5
0008888    8  NORMAL      

试试这个

data have;
input agreement $ id status $10. day;
datalines;
0002255 0 NORMAL    3  
0002255 1 PROBATION 4  
0002255 2 NORMAL    14 
0007777 3 NORMAL    23 
0007777 4 NORMAL    8  
0007777 5 NORMAL    9  
0008888 6 PROBATION 11 
0008888 7 NORMAL    12 
0008888 8 NORMAL    5  
;
data want(drop=d dd);
set have;
if status ne "PROBATION" then d = day;
else do;
status = "OTHER";
dd = day;
day = d;
output;
status = "PROBATION";
day = dd;
end;
output;
retain d;
run;

最新更新