从Excel行导入SAS列名称

时间:2015-07-07 09:02:37

标签: excel import sas xlsx

我正在尝试从XLSX Excel文件创建一个SAS表,如下所示。 SAS列名称将是Excel文件中的第3行,并从第5行读取数据。

     A         B       C       D        F    ...
1 
2
3   Date     Period  Rate  Rate down Rate up ... 
4 
5 2015-04-30   1     0.25     0.23     0.27  ...
6 2015-05-31   2     0.21     0.19     0.23  ...
.  .........................................
.  .........................................

我正在使用proc import收集表格,如下所示:

proc import datafile = have out=want DBMS = excel; 
GETNAMES=YES; MIXED=YES; SCANTEXT=YES; USEDATE=YES; DATAROW=5; 
run;

问题是Proc Import采用数字格式的第3行中的列名称,就像Excel文件的其余部分一样,因此SAS将"."而不是Date等列名称放入Rate因为SAS并不将它们理解为数值。

我找到proc import选项,例如DATAROW=5来读取第五行的数据,MIXED=YES表示Excel表包含数字和字符值。 GETNAMES=YES从表中获取列名,SCANTEXT=YES来扫描文本,如您所知。但是,即使有这些选项,我也得到了如下所示的SAS表。整个SAS表格是数字格式,因此无法从Excel中解析名称:

     F1     F2   F3    F4    F5   ...
1     .      .   .     .     .    ...
2     .      .   .     .     .    ...
3 30APR2015  1  0.25  0.23  0.27  ...
4 31MAY2015  2  0.21  0.19  0.23  ...
. ...............................
. ...............................

有关如何将第三行XLSX文件导入SAS表中的列名的想法吗?

1 个答案:

答案 0 :(得分:4)

行。我找到了解决方案。我应该添加一个简单的选项,如RANGE=A3:G2000。在一个非常奇怪的问题,我选择DATAROW=5选项时出错,所以我删除了它。所以代码变成了:

proc import datafile = have out=want DBMS = excel; 
GETNAMES=YES; MIXED=YES; SCANTEXT=YES; USEDATE=YES; RANGE='A3:G2000'; 
run;

现在它有效。但是RANGE选项没有写在每个网页上,很难找到。

SAS也无法意识到像#" Date"应该是字符格式。但是当你使用Range选项时它会实现它吗?