我試圖使用宏和數組來延遲一組變量(id)。我的步驟是:1。 滯後的所有變量(組沒關係) 2. .
使用宏和數組來延遲SAS中的一組變量
更換不當滯後細胞,但我發現我的代碼是越野車和欣賞任何建議。
下面是數據:
data old;
input id sale capx profit;
datalines;
1 11 111 1111
1 12 112 1112
1 13 113 1113
1 14 114 1114
1 15 115 1115
1 16 116 1116
1 17 117 1117
2 21 221 2221
2 22 222 2222
2 23 223 2223
3 31 331 3331
3 32 332 3332
3 33 333 3333
3 34 334 3334
4 41 441 4441
4 42 442 4442
4 43 443 4443
4 44 444 4444
4 45 445 4445
4 46 446 4446
;
run;
代碼:
data new;
set old;
run;
%macro lag_var(dataset, lag);
proc sort data=&dataset;by id;
data &dataset;
set &dataset;
by id;
array vs(3) sale capx profit;
%do j=1 %to 3;
%do i=1 %to &lag;
lag&j&i=lag&i(vs(&j));
if first.id then
do;
count=1;
lag&j&i=.;
end;
count+1;
if (not first.id and count<=&i) then
do;
lag&j&i=.;
count+1;
end;
%end;
%end;
run;
%mend lag_var;
%lag_var(new,5)
電流輸出(錯誤):
我的預計業績:
DomPazz」 s輸出:
你能談談你想達到什麼樣的?它看起來像是你可以/應該用不同的方法做的事情。很明顯,你想總結每組的最後一個記錄的信息 - 爲了什麼目的?它的一些看起來是你的示例數據的確定性。而且你的方法看起來並不像它會在更多的觀察結果中存在。 – sasfrog
您是否有權訪問PROC EXPAND?這對於這些類型的場景來說非常有用。 – 2013-10-12 22:55:12