我有一个包含ID,日期和金额的数据集。每个id可能有几行,具体取决于事务数量和执行的事务数。我需要使用retain语句来查找第一次更改金额之间的时间差。我知道我需要保留所有3个变量,但我不确定如何解决这个问题?任何帮助都会很棒
答案 0 :(得分:3)
这是retain语句的基本用法。我无法从你的描述中确切地说出你需要什么。也许你需要retain
第二个变量,然后使用if ... then ... else ...
(日期匹配,然后....,否则....)无论如何,也许这会让你开始......
DATA in;
INPUT id var1 ;
DATALINES;
1 12
1 24
1 26
2 20
2 25
2 11
;
DATA out (drop=var1_lag);
set in;
by id;
if first.id then diff=.;
else diff = var1 - var1_lag;
var1_lag = var1;
retain var1_lag;
PROC PRINT data=out;
RUN;
输出:
Obs id var1 diff
1 1 12 .
2 1 24 12
3 1 26 2
4 2 20 .
5 2 25 5
6 2 11 -14