1

他のテーブルから独自の構造で空のテーブルを生成するマクロを作成しています。変数の型を変更するには?

私のコードの例:

`%let vname = %sysfunc(getvarc(&dsid,%sysfunc(varnum(&dsid,varName))));
%let vtype = %sysfunc(getvarc(&dsid,%sysfunc(varnum(&dsid,varType))));
%let vformat = %sysfunc(getvarc(&dsid,%sysfunc(varnum(&dsid,varFormat))));

%if &vtype = C %then %do;
    &vname=putc(&vname,&vformat);
%end;`

そして、それは機能していません... var タイプを変更する方法は他にありますか?

4

1 に答える 1

1

変更されたデータ型 (定義) のいくつかの列を含む空のテーブルが必要なのか、それとも実際にデータの内容/値を変換したいのかを明確にする必要があります。最初のケースははるかに簡単です。現在入っているので

&vname=putc(&vname,&vformat);

定義ではなく、データ値を変換しようとしています。変数の定義は変更されず、データ ステップでは実際には変更できません。同じ名前のデータ ステップに元の変数がまだ存在する場合、「新しい」変数を作成することはできません。

データ ステップでは、データ ステップ内で異なる名前の新しい変数を定義し、出力データセットで RENAME (元の名前に変更) および DROP (元の名前) オプションを使用して、出力データセットで同じ名前になるようにする必要があります (必要に応じて明確にしてください)。

空のテーブルを定義するには、PROC SQL の方が簡単です。次のようなコードを作成する必要があります。

proc sql;
create table lib.table (
orig_var1 type format informat label
, orig_var2 NEWTYPE format informat label
, ...
);
quit;

これは、dictionary.columns から作成できます。これにより、変数の元の順序を維持することも容易になります (データ ステップではそれほど簡単ではありません)。数値変数のフォーマットされた値を新しい文字変数に格納する場合は、使用するフォーマットの長さに基づいて、文字変数の適切な長さを定義するように注意する必要があります。

于 2012-10-10T11:35:10.107 に答える