SAS proc使用多个电子表格导入.xls并附加

时间:2014-11-27 05:58:29

标签: sas

情况:我有一个包含4个名为"SheetA", "SheetB", "SheetC", "SheetD"的电子表格的工作簿.xls。

对于导入一个电子表格,我执行以下操作。

proc import
    out = outputtableA
    datafile = "C:\User\Desktop\excel.xls"
    dbms = xls replace;
    sheet = 'SheetA';
    namerow = 3;
    startrow = 5;
run;

所有电子表格都有相同数量的变量和格式。我想使用数据步骤将所有四个outputtableX组合在一起:

data combinedata;
    set outputtableA outputtableB outputtableC outputtableD;
run;

我是SAS的新手,我在想arraydo-loop是否可以提供帮助。

3 个答案:

答案 0 :(得分:2)

我不会使用do循环(因为它们几乎总是过于复杂)。相反,我会让它成为数据驱动的。如果可以,我也会使用里斯的解决方案;但是如果由于namerow / datarow选项必须使用PROC IMPORT,则可以使用。

首先,创建libname。

libname mylib excel "c:\blah\excelfile.xls";

如果您更喜欢xls选项,我们实际上并没有使用它,但这可以让我们得到这些表。

proc sql;
  select cats('%xlsimport(sheet=',substr(memname,1,length(memname)-1),')')
    into :importlist separated by ' '
    from dictionary.tables
    where libname='MYLIB' and substr(memname,length(memname))='$';
quit;

libname mylib clear;

现在我们已经获得了一个宏调用列表,每张一个。 (工作表是一个数据集,但最后有一个' $')

现在我们需要一个宏。你已经写好了这件事。让我们在这里替换一些东西。

%macro xlsimport(sheet=);
  proc import
    out = out&sheet.
    datafile = "C:\User\Desktop\excel.xls"
    dbms = xls replace;
    sheet = "&sheet.";
    namerow = 3;
    startrow = 5;
  run;
%mend xlsimport;

现在我们称之为。

&importlist.

我作为一个练习留给家中的观众将所有这些包装在另一个宏中,该宏能够在给定文件名作为宏参数的情况下运行它;一旦你这样做了,你就拥有了一个完整的宏,只需很少甚至无法导入整个excel libname。

答案 1 :(得分:1)

如果你是一个xls文件并使用32位版本的SAS,那么这样就可以了:

libname inxls excel 'C:\User\Desktop\excel.xls';

proc datasets library=excel;
copy out=work;
run; quit;

libname inxls;

然后,您可以执行上述步骤将文件附加到一起。我不确定Proc Import with excel是否识别选项名称行和开始行,因此您可能需要以某种方式修改代码以适应这种情况,可能使用firstobs然后手动重命名变量。

答案 2 :(得分:0)

假设变量名称相同,您的工作将会起作用。如果他们不使用重命名语句使它们完全相同。

data combinedata;
set outputtableA(rename=(old_name1=new_name1 old_name2=new_name2 ... ))
    outputtableB(...)
    ...
    ;
run;

显然,填写省略号。