これは、コーディングをあまり必要としない別のアプローチです。proc コンテンツを実行する必要はなく、変数の数を知る必要も、マクロ関数を作成する必要もありません。また、いくつかの追加のことを行うために拡張することもできます。
ステップ 1 では、組み込みのディクショナリ ビューを使用して、目的の変数名を取得します。これに適したビューは、sashelp.vcolumn の別名を持つ dictionary.columns です。ディクショナリ libref は proc sql でのみ使用できますが、sashelp エイリアスはどこでも使用できます。私は DMS を使用して Windows で作業しており、常に sashelp ライブラリをインタラクティブに表示できるため、sashelp エイリアスを使用する傾向があります。
proc sql;
select compress(Name||"_Ref") into :name_list
separated by ' '
from sashelp.vcolumn
where libname = 'WORK'
and memname = 'NAMES';
quit;
これにより、目的の名前で使用できるスペース区切りのマクロが生成されます。
ステップ 2 空のデータ セットを構築するには、次のコードが機能します。
Data New ;
length &name_list ;
run ;
少し複雑な select ステートメントを使用することで、長さの仮定を回避したり、新しい変数名を使用して入力済みのデータセットを作成したりできます。
例えば
select compress(Name)||"_Ref $")||compress(put(length,best.))
into :name_list
separated by ' '
各変数の以前の長さを保持するマクロ変数を生成します。これは、上記の手順 2 を変更しなくても機能します。
データセットの名前変更オプションで使用するデータ セットを作成するには、select ステートメントを次のように置き換えます。
select compress(Name)||"= "||compress(_Ref")
into :name_list
separated by ' '
次に、ステップ 2 のコードを次のコードに置き換えます。
Data New ;
set names (rename = ( &name_list)) ;
run ;