%macro getName;
%let name = %sysfunc(translate(&val, __, -/));
%mend;
%macro loopit(mylist);
%let else=;
%let name=;
%let n = %sysfunc(countw(&mylist, %str( )));
data
%do I=1 %to &n;
%let val = %scan(&mylist,&I, %str( ));
%getName
mydata_&name
%end;
other
;
set mydata;
%do j=1 %to &n;
%let val = %scan(&mylist,&j, %str( ));
%getName
%if &j ne 1 %then %do;
%let else=else;
%end;
&else if code = "&val" then output mydata_&name;
%if &j = &n %then %do;
else output other;
%end;
%end;
run;
%mend;
options mprint;
%let list=a-a b/b c-;
%loopit(&list);
このバージョンでは、単語区切りとしてスペース ( ) のみを使用する修飾子を使用COUNTW
して関数を使用します。SCAN
%str( )
また、新しいマクロgetName
を使用して、SAS 命名規則に従ってデータセットの名前を作成します (入力するために%let name = ;
内部に変数を提供するだけであることに注意してください)。%loopit
%getName
%getName
許可されていない文字をアンダースコアに変換します (異なるセパレーターを持つ同じ値がある場合、ここで名前の競合が発生する可能性があります)。