1

SAS データセットの一連の変数から最後の 3 文字を削除したいと考えています。(2 つのデータセットを連結する必要があります。)

最初のセットでは、変数の名前は次のようになります: abc 、 def 、 ghi ...

2 番目のセットでは、abc_1A、def_1A、ghi_1A ... という名前が付けられています。

100 以上の変数から「_1A」を削除するにはどうすればよいですか? 最初のデータセットに単純に「_1A」を追加したくない

ありがとう

4

1 に答える 1

2

いくつかのオプションがあります。ここに 1 つの「安全な」オプションと 1 つの「安全でない」オプションがあります。

安全なオプション:

変数の名前を _1A. なしの名前に変更するマクロを作成します。引数: var = 変数名、len = 最終的な変数名に必要な長さ。;

%macro rename_shorter(var=,len=);
&var. = %substr(&var.,1,&len.)
%mend rename_shorter;

Dictionary.columns から呼び出しのリストを作成します。

proc sql;
select cats('%rename_shorter(var=',name,',len=',length(name)-3,')') 
 into :renamelist separated by ' '
 from dictionary.columns
 where libname='SASHELP' and upcase(memname)='CLASS';
quit;

そのリストを呼び出します。

data want;
set sashelp.class(rename=(&renamelist.));
run;

物事が正しく配置されていることをチェックしないという意味で、安全でないオプションは次のとおりです

proc sql;
create table want as 
 select * from have_namedright H
 outer union corr
 select * from have_namedwrong W
;
quit;
于 2013-09-20T13:44:03.150 に答える