2016-05-18 12 views
0

条件マクロにデータセット変数の値を渡す方法がわかりません。のは、我々が持っているとしましょう:sasが条件マクロに変数を渡す

data HAVE; 
    input id name $ value ; 
    datalines; 
    1 pluto 111 
    2 paperino 222 
    3 trump 333 
    4 topo 444 
    ; 
run; 

私が条件であれば、他の作るためにSAS conditinalマクロ内のデータセットの変数名を使用したいと思います。

options minoperator mlogic; 
%macro test(var)/mindelimiter=','; 

if name = &var then do; 

    %if &var in(pippo,pluto) %then %do "if &var"n = name; %end; 
    %else %do; "mod &var"n = name; end; 

end; 

%mend test; 

が、IF名称= &:私が何を意味するか

(または、条件付きマクロ内部)

例えば
options minoperator mlogic; 
    %macro test(var)/mindelimiter=','; 

    %if &var in(pippo,pluto) %then %do; "if &var"n = name; end; 
    %else %do;"mod &var"n = name;end; 

    %mend test; 

data want; 
    set have; 
    %test(pippo); 
    %test(arj); 
    %test(frank); 
    %test(pluto); 
    %test(george); 
run; 

条件マクロ前に別のIF段階で、このコードを使用することですvarは常に真です...マクロ内で名前データセット変数を使用することにはいくつかの問題があります。条件付きマクロ内部のコンディショニングの

EDIT最初の答えAFTER

コード例:

%macro test(var)/mindelimiter=','; 

%if &var in(pippo pluto) %then %do; 
    if name = 'pluto' then ifif_&var. = name; 
    if_&var. = name; 
    %end; 
%else %do; 
    mod_&var. = name; 
%end; 

%mend test; 

それは単なる一例コースを外れ、それはほとんど役に立たないのです。

+0

データセットHAANTのデータを使用してデータスタンプWANTを生成するように見えます。そうであれば、別のデータステップ(通常はdata _null_ステップ)を追加し、 'CALL EXECUTE()'を使ってコードを生成するか、コードをファイルに書き出し、生成されたコードを実行するために '%INCLUDE'を使用する必要があります。 – Tom

答えて

1

コードにいくつかのエラーがありますが、このように使用することは本質的に間違ってはいません。

%macro test(var)/mindelimiter=','; 

if name = "&var" then do; 

    %if &var in(pippo pluto) %then %do; if_&Var. = name; %end; 
    %else %do; mod_&var. = name; %end; 

end; 

%mend test; 

これは機能しますが、少なくとも私があなたの望むものについては、わかることができます。

+0

はい、それは動作します。もう一つの質問。そして条件付きマクロの中でIF条件を使うのはどうですか?私はその質問の例を作ります。 – arj

+0

私はここにあなたが何を求めているのか理解できません。マクロで生成したいコードがどのように見えるのでしょうか? '' if mod'n'ビットは 'if'条件を生成するためのものですか? (それはできませんので) – Joe

+0

が質問に追加されました。 – arj

0

データからコードを生成するように見えます。

data _null_; 
    set have end=eof; 
    if _n_=1 then call execute('data want;set have;'); 
    call execute(cats('%nrstr(%test)(',name,')')); 
    if eof then call execute('run;'); 
run; 
関連する問題