【问题标题】:Stack Data Loop - SAS Macro堆栈数据循环 - SAS 宏
【发布时间】:2014-02-18 02:35:28
【问题描述】:

我有 51 个文件(我从 BLS 中提取了所有 50 个州和华盛顿特区的失业率),我需要将它们堆叠在一起。我正在研究一个将导入文件然后堆叠它们的宏,但我一直坚持如何编写一个循环来堆叠它们。我只堆叠第一个和最后一个数据集,中间什么都没有。我不确定我做错了什么,任何帮助将不胜感激。提前致谢。

/*MACRO TO IMPORT TRANSLATED RAW DATA FILES*/
%macro import;


%do iterate = 1 %to &files;


  data _null_;
  set files(where = (file = &iterate));
      call symput('infile',left(trim(filename)));
  call symput('State',left(trim(state)));
  run;


  %put &infile;
  %put &state;
  /*IMPORT RAW DATAFILES*/
  proc import datafile = "&raw\&infile" out = &State dbms = xls replace;
  getnames = yes; namerow = 11; datarow = 12;
  run;
  /*CREATE A NEW STATE COLUMN*/
  data &State;
  set &State;
  State = "&State";
  run;

  %if &iterate = 1 %then %do;
  data merge1;
  keep year period labor_force employment unemployment unemployment_rate state;
  format year 4. period $3. labor_force employment unemployment comma12.2 unemployment_rate 4.2
  state $24.;
  set &state;
  run;
  %end;

  %if &iterate > 1 %then %do;
  data unemploy_merge;
  keep year period labor_force employment unemployment unemployment_rate state;
  set merge1 &state;
  run;
  %end;


%end;


%mend import;

【问题讨论】:

    标签: loops macros sas do-loops


    【解决方案1】:

    您需要将第二个 (&iterate > 1) 语句更改为:

    data merge1;
    keep year period labor_force employment unemployment unemployment_rate state;
    set merge1 &state;
    run;
    

    否则,您将始终使用来自 ITERATE=1 的数据和当前文件创建一个名为“unemploy_merge”的新数据集。这就是为什么你只能在最后看到第一个和最后一个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多