我正在尝试附加2个SAS数据库文件。一个文件只包含1行,这是第二个文件的标题。第二个文件包含没有标题的实际数据。
有什么办法可以追加/合并两个文件,所以会有一个文件包含正确的标题和数据吗?
感谢。
答案 0 :(得分:0)
您有两个数据集,这些数据集必须已经有列名。
任务是将数据数据集的列重命名为标题数据集的第一行的值。可以使用Proc DATASETS
步RENAME
语句对数据集变量进行就地重命名。因此,实际的任务是构造一个符合目标的重命名语句。
解决方案需要
例如,构建一些测试数据
data have_header;
name1='x';
name2='y';
name3='z';
name4='a';
name5='b';
name6='c';
run;
data have_data;
do _n_ = 1 to 10;
k+1; field1=k;
k+1; field2=k;
k+1; field3=k;
k+1; field4=k;
k+1; field5=k;
k+1; field6=k;
output;
end;
drop k;
run;
运行数据 null 步骤以创建要在后续Proc DATASETS
data _null_;
set have_header; * read first row, presumed to contain column names;
dsid_header = open('have_header');
dsid_data = open('have_data');
length rename_statement $32000;
* process each column;
do _n_ = 1 to attrn(dsid_header,'nvar');
header_varname = varname(dsid_header,_n_);
data_varname = varname(dsid_data,_n_);
* construct the rename expression for ith variable;
rename_var = catx(
'=', data_varname, vvaluex(header_varname)
);
* accumulate the expressions as a statement source code;
rename_statement = catx (
' ', rename_statement, rename_var
);
end;
* save the generated source code portion to a macro variable for use in the subsequent Proc step;
call symput ('rename_statement', trim(rename_statement));
stop;
run;
在重命名语句中应用累积的重命名表达式
proc datasets nolist lib=work;
modify have_data;
rename &rename_statement;
run;
quit;