-2
次のコードが実行され、結果が間違っています。 最初の条件が確認されると、コードが正しく機能しません。 値が3のときにlag1は失われたままです... 助けてくれてありがとう。最初の条件が成立したときに条件が実行されなかった場合SAS
DATA VALUES;
INPUT VAL caract$ var1 var2;
DATALINES;
1 a 12 0
1 c 0 4
1 c 3 2
2 a 3 2
2 b 15 16
2 b 4 1
3 a 12 13
3 c 12 13
4 c 14 15
5 b 14 0
6 b 14 15
7 a 12 15
7 c 12 15
8 c 14 15
9 c 14 5
10 c 13 7
;
RUN;
%macro lag_var(dataset, lag);
data &dataset&lag;
set &dataset;
by VAL;
%do i=0 %to &lag;
if caract eq 'b' then
lag&i=lag&i(var1);
else lag&i = lag&i(var2);
%end;
if first.VAL then do;
count=0;
%do i=1 %to &lag;
lag&i=.;
%end;
end;
count+1;
%do i=1 %to &lag;
if (not first.VAL and count<=&i) then do;
lag&i=.;
end;
%end;
maxi = max(of lag1 - lag&lag);
run;
%mend lag_var;
%lag_var(VALUES,3);
[SAS EGのlagcalculationの問題ではなくTとしてラスを計算する - T-1]の可能な重複(http://stackoverflow.com/questions/40485127/sas-eg-lagcalculation-issue-not-calculating- las-as-tt-1) – Reeza
私は、あなたが「失われたままでいる」ということを正確に理解していません。あなたのコードが正確に何をすべきか、正確には何が起こっていますか?また、ここで[良い質問をする方法](http://meta.stackexchange.com/help/how-to-ask)と[最小限で実用的で検証可能な例を書く方法]を読んでください(http:// stackoverflow .com/help/mcve) – giusti