我正在尝试从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表中的列名的想法吗?
答案 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选项时它会实现它吗?