1

列名が重複する CSV ファイルを SAS にインポートしたいと考えています。例

名前 abc abc def def

私のファイルの列名です。

SAS にファイルをインポートしようとすると、変数の名前が自動的に var1、var2 などに変更されます。

元の列名を保持したい。これどうやってするの?

4

3 に答える 3

1

いくつかの方法があります。示されているように例を実行する最も簡単な方法:

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;
于 2013-08-24T19:25:14.447 に答える
0

SAS データセットで列名を重複させることはできません。それらの名前を何かに変更する必要があります。動作が気に入らない場合proc importは、 を介して手動で名前を変更できますproc datasets

proc datasets;
    modify <dataset>;
    rename var1=name var2=abc1 var3=abc2 var4=def1 var5=def2;
quit;
于 2013-08-24T13:20:51.587 に答える