【问题标题】:How to keep single quote when importing Excel data to SAS将Excel数据导入SAS时如何保留单引号
【发布时间】:2018-07-31 00:17:46
【问题描述】:

我正在使用 Proc Import 将 Excel 电子表格导入 SAS:

Proc Import out=OUTPUT
Datafile = "(filename)"
DBMS=XLSX Replace;
Range = "Sheet1$A:Z";
run;

我的数字数据列包含在 Excel 中以数字形式保存的值和以文本形式保存的 '0 值的混合 - 即带有前导撇号/单引号。当 SAS 导入这些时,它会一视同仁地对待它们(即,它返回去掉前导撇号的值的字符串)。

当应用计算(例如平均)时,这会导致与电子表格的差异,因为 Excel 将 '0 值视为缺失,但 SAS 将它们视为 0。

是否可以将值导入为字符串包括前导单引号/撇号,以便我可以用缺失值替换 '0,但将 0 记录保留为 0?我想避免手动操作 Excel 中的数据,因为这些数据是从外部来源提取的(不要问...)

【问题讨论】:

  • 你能让他们用无效数字替换字符串零吗?像字符串空格或字符串句点。
  • 这几乎是我必须做的。将数据从源中提取到 Excel 中的 Excel 加载项(正如我所说,不要问...)具有配置如何返回缺失值的选项。默认情况下设置为 0,我现在设置为 . {period} 在我的摘录中,解决了问题。

标签: sas


【解决方案1】:

我对此表示怀疑。我认为 Excel 并没有真正将前导撇号视为价值的一部分。这只是一种疯狂的方式来表明一个值是一个文本字符串(而不是数字)。当 SAS 导入数据时,它会识别出报价不是值的一部分。因此,如果您有一个 Excel 列,在某些单元格中为 0,而在其他单元格中为 0,它将作为字符出现,我认为您无法区分它们之间的区别。

很遗憾,xlsx 引擎不支持 s DBSASTYPE 选项。导入 Excel 的其他引擎具有 DBSASTYPE 选项。这应该允许您告诉 SAS 将列作为数字变量导入,即使它看到字符值。如果您希望单元格中的所有文本值都转换为缺失值,那么这可能会奏效。但它可能仍会将 0 视为 0。我远离 SAS,所以无法测试。

【讨论】:

  • 谢谢昆汀。我找到了一个解决方案(似乎是对上面 Tom 的评论的回应),它解决了我的直接问题,但遗憾的是在导入过程中没有更强大的方法在 SAS 中实现这一点。
【解决方案2】:

选项:

~(波浪号)格式修饰符使您能够读取和保留单引号。

http://support.sas.com/documentation/cdl/en/lrcon/62955/HTML/default/viewer.htm#a003209907.htm

是否可以将 .xlsx 转换为 .txt 并保留单引号?因为不可能在数据步骤中输入 xlsx。

 filename df disk 'C:\data_temp\ex.txt';

  data test;
    infile df firstobs=2;
    input ID $2. x ~$3. ;
  run;

  proc print data=test;
  run;

【讨论】:

  • 有趣的答案BEMR;我不知道 ~ 修饰符。但是,最终我想导入一个 xlsx 电子表格并避免将该电子表格保存到 csv 的步骤,以便使工作尽可能自动化。
猜你喜欢
  • 2015-01-02
  • 1970-01-01
  • 1970-01-01
  • 2014-02-14
  • 2019-08-22
  • 1970-01-01
  • 2019-10-12
  • 1970-01-01
  • 2016-04-02
相关资源
最近更新 更多