首页 文章

从Excel行导入SAS列名称

提问于
浏览
2

我正在尝试从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将 "." 而不是列名称(如 DateRate )放置,因为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文件的第3行作为SAS表中的列名的任何想法?

1 回答

  • 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选项时它会实现它吗?

相关问题