列名が重複する CSV ファイルを SAS にインポートしたいと考えています。例
名前 abc abc def def
私のファイルの列名です。
SAS にファイルをインポートしようとすると、変数の名前が自動的に var1、var2 などに変更されます。
元の列名を保持したい。これどうやってするの?
列名が重複する CSV ファイルを SAS にインポートしたいと考えています。例
名前 abc abc def def
私のファイルの列名です。
SAS にファイルをインポートしようとすると、変数の名前が自動的に var1、var2 などに変更されます。
元の列名を保持したい。これどうやってするの?
いくつかの方法があります。示されているように例を実行する最も簡単な方法:
data want;
infile datalines dlm=',';
input name $ abc1-abc2 def1-def2;
datalines;
John,1,2,3,4
Jack,4,5,6,7
;;;;
run;
proc print data=want;
run;
明らかに、1-2 は 1-35 などになる可能性があります。
データがそれよりも複雑で、変数がインターリーブされている場合は、ヘッダー行のみを読み取り、転置し、そこから入力ステートメントを作成することをお勧めします。
data varnames; *this dataset reads the header in only - use infile with obs option for actual csv;
input varname $ @@;
order+1; *so we can get back to proper order;
datalines;
Name abc abc def def
;;;;
run;
proc sort data=varnames; *sort by varname;
by varname;
run;
data input_statement;
set varnames;
by varname;
if first.varname then counter=0;
if not (first.varname and last.varname) then do; *if this is not the only varname with same varname;
counter+1; *increment counter;
varname=cats(varname,counter); *append counter to varname;
end;
run;
proc sort data=input_statement; *back to correct order;
by order;
run;
proc sql; *select the new names into a macro variable;
select varname into :namelist separated by ' ' from input_statement;
quit;
data want; *input them;
infile datalines dlm=',';
input (&namelist) ($); *here I just make them all CHAR. If you have all NUM except the name var,
you could leave name out of your datasets and include it separately.;
datalines;
John,1,2,3,4
Jack,4,5,6,7
;;;;
run;
SAS データセットで列名を重複させることはできません。それらの名前を何かに変更する必要があります。動作が気に入らない場合proc import
は、 を介して手動で名前を変更できますproc datasets
。
proc datasets;
modify <dataset>;
rename var1=name var2=abc1 var3=abc2 var4=def1 var5=def2;
quit;