%macro name_modal();
/*Create macro variables which contain the modalities of variables*/
%do i=1 %to &num_Var;
data _null_;
set &lib..Table_variable_modal_&i.;
call symputx('num_Mod'||compress(put(&i,4.)),_N_,"G");
call symputx('table'||compress(put(&i,4.))||'modal'||compress(put(_N_,4.)),compress(&&name_Var&i.),"G");
run;
%end;
/*Display modalities by variable*/
%do i=1 %to &num_Var;
%put &&name_Var&i. has &&num_Mod&i. modalities ;
%do j=1 %to &&num_Mod&i.;
%put %nrstr(&&tableb&i.modal&j.);
%end;
%end;
%mend name_modal;
%name_modal();
コードが自己文書化していることを願っています。 問題をここで説明します。 変数を使ってモダリティを表示するプログラムの2番目に渡すまで、すべてが正常に機能しています。例えば引用符が一致しないSAS
マクロ変数にストックされているモダリティの名前は
$ 100%BLO、
100%COLOR、
AVON & RAGOBERT、
バランタイン、
L'OREAL、
AT のようなものです& T、
UVA
など
%putを正しく使用できません。 %bquoteと%nrstrを使用しようとしましたが、問題は解決しません。 私が見ることができる唯一の解決策は、モダリティの名前を変更することですが、名前はクライアントから来ているので、データを修正する可能性はありません。
は、私は(グローバルマクロの欠落)あなたのコードを再作成することはできませんので、すべてあなたのサンプルデータのための質問に答えるのは難しいですあなた
奇妙なことに、これは動作します。私は%superqを使用したことを思い出したので言っていますが、まだいくつかのエラーがあります。私は明日の仕事で再びプログラムをデバッグしようとしたときにフィードバックをお送りします。 – afiqjohari
いいです...%superqが&jを解決したことに私は驚いています。 –
私はちょうどプログラムをデバッグする必要があります。プログラムはモダリティ(j = 1〜numMod)だけをループするとうまくいった。今のところ%superq()はその仕事をすることができます。しかし、これに別のループを追加しようとすると、%superv()は%&& tableb&i.modal&jの解釈に失敗します。正しく – afiqjohari