データステップで呼び出しを実行してマクロを実行しています。 私のデータステップから欲しいものは以下の通りです:実行時に毎回出力変更が実行される
既存のすべての列に(マクロを介して)新しい列を追加し、最後に2つの列の合計である新しい列を追加します。 マクロなしでも可能ですが、私はSASに慣れていないため、マクロのロジックを理解してexecuteを実行したいので、このようにしたいと思います。 (後 :
data values;
input a1 a2 b1 b2;
datalines;
1 0 3 10
0 5 6 11
7 8 9 0
;
run;
と、このマクロ:その後、
%macro loop1(myDataset);
proc contents data=&myDataset. out=Col_Names (keep=Name) noprint;
run;
proc sql noprint;
select count(Name) into :length from Col_Names;
quit;
%do j = 1 %to &length;
data &myDataset.;
set &myDataset.;
n&j=0;
run;
%end;
%mend;
次のデータのステップは、異なる出力、私はそれを実行する最初の3回を作成し
それでは、私は次の表を持っているとしましょう毎回私は元のデータステップをデータラインで再実行します)
data values;
set values;
if _n_=1 then call execute('%loop1(values);');
test=sum(a1,a2);
run;
エラーで
最初の実行結果:
WARNING: Apparent symbolic reference LENGTH not resolved. ERROR: A character operand was found in the %EVAL function or %IF condition where a numeric operand is required. The condition was: &length ERROR: The %TO value of the %DO J loop is invalid. ERROR: The macro LOOP1 will stop executing.
セカンドランの結果、私がしたい正確に何で:
列A1、A2、B2、B2、テスト、N1、N2、N3、N4
そして、上の3回目から、出力がまま:
列A1、A2、B2、B2、テスト、N1、N2、N3、N4、N5
望ましくないとn5が入っています。
2回目の出力から常に出力を得るにはどうすればよいですか?
ありがとうございます!しかし、結果は直接的に3番目のものであり、私は2番目のものを望んでいます。 – Zap
回答が更新されました。 –
しかし、私のマクロの後にデータステップで作成された場合、どのように 'テスト'がproc SQL内にあるのでしょうか?この場合、マクロは動作しますが、新しいカラムがあるたびにそれを適応させる必要があります。他に方法はありませんか? – Zap