お世話になります。daipdoと申します。
実行していないので間違っているかもですが、最後のデータステップ部分の"%scan(&name, &i, ~)"n = %SYSFUNC(inputN(%scan(&name, &i, ~),6.));が問題と思います。errorもそこで出ておりますし。以下気になった部分二つを列挙します。
・SASの式の左辺に"%scan(&name, &i, ~)"nを持ってくる…つまり式の左辺に関数を置くことをやったことが無いのでどういう挙動になっているかがわかりませんが、この部分って意図通りの物が出来ておりますでしょうか
・%SYSFUNC(inputN(%scan(&name, &i, ~),6.))のinputn関数の引数に%scanを当てていますが、これがerrorの直接の原因と思います。おそらくマクロ変数nameを~で分解した際に、分解後の文字列の前後に"が残っているのだと思います。多分…最終的にinputnの第一引数に”で挟まれた文字列が残っているので書いておられるerrorが出ていると予想します。
以下が私なりに最後のデータステップ部分を修正したものになります。inputnの関数をしている部分の左辺と右辺の内容を格納したマクロ変数を作成し、inputnの部分ではあくまでそれぞれのマクロ変数を記載する形にしています。(_inと_out)
多分こうすれば式の右辺に関数を置くことなく、また式の左辺でsysfuncを使うこともなくなると思います。
マクロkataをこのマクロhogeに置き換えて、_nameの設定部分とかお試しの変数とかを消したり、マクロ変数の名前を良い感じに変えてもらえれば大丈夫と思います…きっと…
%macro hoge() ;
/*対象の変数群が入ったマクロ変数*/
%let _name = hoge1~hoge2~hoge3 ;
%put &=_name ;
%do i = 1 %to 1 ;
/*対象の変数群からi番目の変数名をマクロ変数に格納*/
%let _in = %sysfunc( scan(&_name , &i , ~) ) ;
/*i番目の変数名の末尾にnを付加してマクロ変数に格納*/
%let _out = %sysfunc( cats( &_in , n ) ) ;
%put &=_in ;
%put &=_out ;
data _null_ ;
/*変数のtest値をset ここはお試しなので消しても良い*/
hoge1 = "20,000.00" ;
hoge2 = "10,000.00" ;
hoge3 = "30,000.00" ;
/*数値に変換*/
&_out = inputn( &_in , "comma10.2") ;
/*変数名の形をV_CHに格納 N/C 今回は数値に変換しているのでN*/
V_CH = vtype(&_out.) ;
putlog &_out V_CH ;
run ;
%end ;
%mend hoge ;