【发布时间】:2021-08-13 23:28:14
【问题描述】:
让我们想象一下下表...
| obs | State | Imp | i | i2 |
|---|---|---|---|---|
| 1 | me | 100 | 100 | |
| 2 | me | 90 | 100 | 100 |
| 3 | me | 80 | 100 | 100 |
| 4 | me | 70 | 100 | 100 |
| 5 | me | 1000 | 1000 | 100 |
| 6 | me | 900 | 1000 | 1000 |
| 7 | me | 800 | 1000 | 1000 |
| 8 | me | 0 | 1000 | 1000 |
| 9 | me | 2000 | 2000 | 1000 |
| 10 | me | 1900 | 2000 | 2000 |
| 11 | gu | 20 | 2000 | 2000 |
| 12 | ca | 40 | 2000 | 2000 |
| 13 | ca | 50 | 2000 | 2000 |
| 14 | ca | 30 | 2000 | 2000 |
| 15 | ca | 10 | 2000 | 2000 |
如您所见,“i2”列是滞后 (i)。我想做的是: 1.-列“i”随着它的进展找到最大值,所以我想重置该列 “i”每个第一个“状态”,以获得每个状态的最大值。 2.- 修改“i2”列,使其如下: “State”(obs 1-me、11-gu 和 12-ca)列“i”的每个第一个值都有值 “小鬼”列
| obs | State | Imp | i | i2 |
|---|---|---|---|---|
| 1 | me | 100 | 100 | 100 |
| 2 | me | 90 | 100 | 100 |
| 3 | me | 80 | 100 | 100 |
| 4 | me | 70 | 100 | 100 |
| 5 | me | 1000 | 1000 | 100 |
| 6 | me | 900 | 1000 | 1000 |
| 7 | me | 800 | 1000 | 1000 |
| 8 | me | 0 | 1000 | 1000 |
| 9 | me | 2000 | 2000 | 1000 |
| 10 | me | 1900 | 2000 | 2000 |
| 11 | gu | 20 | 20 | 20 |
| 12 | ca | 40 | 40 | 40 |
| 13 | ca | 50 | 50 | 40 |
| 14 | ca | 30 | 50 | 50 |
| 15 | ca | 10 | 50 | 50 |
我试过这个代码,但它不起作用
data metodo;
set sa80;
retain i;
if first.state then i=max(imp);
else i = max(imp,i);
i2 = lag(i);
run;
data final;
set metodo;
retain i2_aux;
if first.state then i2_aux = total;
else i2_aux = i2;
run;
希望你能帮忙,提前谢谢你
【问题讨论】:
-
保留输入数据中已经存在的变量不会做任何事情。下次 SET 语句执行时,保留的值会被覆盖。