2017-06-01 23 views
0

私が持っているリストに基づいて変数の長さを変更しようとしていますが、コードは機能しているようですが、目的の出力が得られません。ここでのコードは次のとおりです。長さステートメントでのSASマクロコードエラー

%macro LEN(); 
Proc sql ; 
select count(name) into: varnum from variab; 
select name into: varname1-:varname%trim(%left(&varnum)) from Variab; 
select length3 into: len from Length; 

Quit; 


%do i=1 %to &varnum; 

    data Zero; 
     length &&varname&i $ &&len&i.; 
     set desti.test; 

     length _numeric_ 4.; 
     format _numeric_ 12.2; 
     run; 
%end; 
%mend; 

それは警告

WARNING: Multiple lengths were specified for the variable fscadl1 by  
input data set(s). This can cause truncation 
    of data. 

を与え、それが変数の長さを変更doesntの。このコードで何が間違っていますか?

+0

希望の出力は何ですか?簡単な入出力データを投稿できますか? – Tom

答えて

1

の変数リストを変更しようとしていますか?データセット?反復ごとにデータステップ全体を繰り返しますが、一定した宛先に書き込むだけです。これは矛盾しています。

は、おそらく何をしたいです:あなたは、現在のことをやっていないよう&&len&iを定義する必要があると思い

Proc sql ; 
select count(name) into: varnum from variab; 
select name into: varname1-:varname%trim(%left(&varnum)) from Variab; 
select length3 into: len from Length; 

Quit; 

%macro set_len(varnum=); 

%do i=1 %to &varnum; 
     length &&varname&i $ &&len&i.; 
%end; 
%mend; 
data Zero; 
    %set_len(&varnum); 
    set desti.test; 

    length _numeric_ 4.; 
    format _numeric_ 12.2; 
run; 

注意。

0

警告メッセージは、動作していることを示しています。 SASは、変数を切り捨てるときに警告を出し始めました。 VARLENCHKオプションを使用して警告メッセージを抑制することができます。以下は

は動作します:

options varlenchk=nowarn; 
data want; 
    length name $ 3; 
    set sashelp.class; 
    length _numeric_ 4; 
run; 

あなたのコードが動作しない場合は、私はあなたのマクロは、あなたが期待するSASコードを生成していることを確認してください参照してくださいMPRINTをオンにします。

関連する問題