BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
Nobuyuki
Calcite | Level 5

お世話になります。

 

下記のプログラムのように、ログランク検定を行った後、P値を加工して"p_value_result"という変数に割り当てたいと考えています。

%MACRO ();

...

data _null_;set p_value_;where Test contains "ログランク";
if ProbChiSq="<.0001" or ProbChiSq<0.001 then p_value="P < 0.001";
else if ProbChiSq>=0.1 then p_value="P = " || compress(put(round(ProbChiSq,0.01),8.2));
else p_value="P = " || compress(put(round(ProbChiSq,0.001),8.3));
call symputx("p_value_result", p_value, "G");
run;

%MEND;

 

このマクロを直接読み込ませれば特に問題なく動作するのですが、

%includeで読み込ませますと、何故かマクロ変数に割り当てることが出来ません。

他記事を参照しても解決策が分からずこちらで質問させていただきました。

 

よろしくお願い致します。

1 ACCEPTED SOLUTION

Accepted Solutions
japelin
Rhodochrosite | Level 12

現在はマクロ変数自体がないのか、それともマクロ変数はあるが、空もしくは別の値が割り当てられているのか、どのような状況でしょうか。

 

まず、簡単な再現プログラムを作成しましたが、マクロ変数は問題なく作成されました。

main.sas:

%Macro Mtest1;
data _null_;
  call symputx('X1','TEST1','G');
run;
%Mend;
%Mtest1;

%Macro Mtest2;
data _null_;
  call symputx('X2','TEST2','G');
run;
%Mend;

submit.sas:

%include "C:\temp\main.sas";
%Mtest2;
%put &=x1;
%put &=x2;

 

結果:

2021-05-28_09h46_57.png

 

SASの問題ではなく、使用しているコードに原因がある可能性が高いと思います。

 

原始的ではありますが、

・options mprint mlogic; を指定し

・%includeにsource2オプションを指定し、

・%put &=p_value_result; というステートメントをマクロ側および呼び出し側のステップの合間合間に入れ込んで、

きちんとマクロが実行されているのか、マクロ実行時はマクロ変数に値が格納されているのか、

格納されているとしたらどの時点で消えているのか、等を調べてみてはいかがでしょうか。

 

View solution in original post

2 REPLIES 2
japelin
Rhodochrosite | Level 12

現在はマクロ変数自体がないのか、それともマクロ変数はあるが、空もしくは別の値が割り当てられているのか、どのような状況でしょうか。

 

まず、簡単な再現プログラムを作成しましたが、マクロ変数は問題なく作成されました。

main.sas:

%Macro Mtest1;
data _null_;
  call symputx('X1','TEST1','G');
run;
%Mend;
%Mtest1;

%Macro Mtest2;
data _null_;
  call symputx('X2','TEST2','G');
run;
%Mend;

submit.sas:

%include "C:\temp\main.sas";
%Mtest2;
%put &=x1;
%put &=x2;

 

結果:

2021-05-28_09h46_57.png

 

SASの問題ではなく、使用しているコードに原因がある可能性が高いと思います。

 

原始的ではありますが、

・options mprint mlogic; を指定し

・%includeにsource2オプションを指定し、

・%put &=p_value_result; というステートメントをマクロ側および呼び出し側のステップの合間合間に入れ込んで、

きちんとマクロが実行されているのか、マクロ実行時はマクロ変数に値が格納されているのか、

格納されているとしたらどの時点で消えているのか、等を調べてみてはいかがでしょうか。

 

Nobuyuki
Calcite | Level 5

ありがとうございます。

一か所ミスがみつかり解決致しました。

SAS Innovate 2025: Register Now

Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!

Discussion stats
  • 2 replies
  • 1218 views
  • 1 like
  • 2 in conversation