2017-02-08 14 views
1

以下は、インクリメント変数 "i"の値に基づいて一連のデータステップを実行するためのコードです。私はiの値を1(数値であって文字の値ではない)に割り当てているからです。理想的には、第1のデータステップブロックを実行する必要があるが、以下の場合、第2のデータステップブロックが実行されている。プログラムフローの制御

%put & i。 ;ログウィンドウに1を印刷します。

%macro DSN; 
%let i = 1 ; 
data new_DSN; 
run; 
%if i = 1 %then %do;  
    data Dummy ; 
    run; 
    data DUMMY_ ; 
     set DUMMY new_DSN ; 
    run; 
%end; 
%else %if i ^= 1 %then %do ; 
    data DUMMY_ ; 
     set DUMMY_ new_DSN ; 
    run; 
%end; 
%mend DSN; 

%DSN; 

答えて

5

あなたのIF文は、& Iマクロ変数を呼び出すのではなく、単に文字列を比較するI技術的に文字列を話すので、実行している第二のループは、「I」が「1」に等しくない理由も説明1.へ。両方の%IF文の中で、Iの前にアンパサンドを置くだけです。また、コードが実行されている場所をわかりやすくするために、2%のPUTステートメントを追加しました。以下を参照してください:

%macro DSN; 
%let i = 1 ; 
data new_DSN; 
run; 
%if &i = 1 %then %do; 
    %PUT First Loop Run; 
    data Dummy ; 
    run; 
    data DUMMY_ ; 
     set DUMMY new_DSN ; 
    run; 
%end; 
%else %if &i ^= 1 %then %do ; 
    %PUT Second Loop Run; 
    data DUMMY_ ; 
     set DUMMY_ new_DSN ; 
    run; 
%end; 
%mend DSN; 

%DSN; 

enter image description here

関連する問題