附加2个SAS文件,不匹配任何变量名称

时间:2018-05-17 13:59:27

标签: sas append

我正在尝试附加2个SAS数据库文件。一个文件只包含1行,这是第二个文件的标题。第二个文件包含没有标题的实际数据。

有什么办法可以追加/合并两个文件,所以会有一个文件包含正确的标题和数据吗?

感谢。

1 个答案:

答案 0 :(得分:0)

您有两个数据集,这些数据集必须已经有列名。

任务是将数据数据集的列重命名为标题数据集的第一行的值。可以使用Proc DATASETSRENAME语句对数据集变量进行就地重命名。因此,实际的任务是构造一个符合目标的重命名语句。

解决方案需要

  • 阅读标题数据的第一行
  • 对于每个i th 列构造一个old-name = new-name表达式
    • old-name是数据数据集i th 列名
    • new-name是来自i th
    • 的标题row1数据值

例如,构建一些测试数据

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;