如何在SAS中导入一个涉及多个信息/数据部分的Excel选项卡文件?

时间:2016-08-04 20:36:33

标签: excel import sas output

我有一个带有多个不同数据部分的Excel选项卡。例如,第1-57行是普通的Excel数据表,带有相应的字段名称,但在第61行(屏幕截图底部的蓝色行)中,新的表格数据部分开始。这会在同一个excel选项卡中重复几个不同的表格数据部分。 screenshot example

我想将这个excel选项卡导入SAS,然后将每个表格数据部分输出为它自己的表格,我考虑使用蓝色部分名称来识别它是新部分的开头,但是我我不确定如何使用此方法并将其转换为SAS代码。

提前致谢。

1 个答案:

答案 0 :(得分:0)

两个想法。首先,如果它是一个小文件并且您知道所有节标题名称,则可以执行以下操作:

data example;
input id $ var1 - var5;
datalines;
NameA   .   .   .   .   .
A1  11  11  21  24  14
A2  9   8   1   2   3
A3  4   4   3   4   3
A4  2   9   1   2   4
Total   26  32  26  32  24
 "" .   .   .   .   .
NameB   .   .   .   .   .
B1  3166    4135    1186    3775    5641
run;


data step1;
set example;
    retain tablenum 0;
    if id in ("NameA", "NameB", "NameC") then tablenum + 1;
run; 

data table1 table2 /*table... all the way to table N*/;
set step1;
 select (tablenum);
    when (1) do; output table1; end;
    when (2) do; output table2; end;

    *when (N) do; *output tableN; *end;
    end;
run;

如果您知道所有中断的位置,那么您可以做的另一件事是使用proc导入分段处理它,并使用范围告诉SAS每个表的开始和停止位置(此示例假设您的Excel电子表格转到Z列和你的第二张表转到第140行:

PROC IMPORT OUT= WORK.tableA DATAFILE= "C:\xlsfile.xlsx"
 DBMS=EXCEL REPLACE; Range = "SheetName$A1:Z57"; 
RUN;

PROC IMPORT OUT= WORK.tableB DATAFILE= "C:\xlsfile.xlsx"
 DBMS=EXCEL REPLACE; Range = "SheetName$A61:Z140"; 
RUN;