将Excel数据导入SAS时如何保持单引号

时间:2018-07-31 00:17:46

标签: sas

我正在使用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中手动操作数据,因为这些数据是从外部来源绘制的(不要问...)

2 个答案:

答案 0 :(得分:0)

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

很遗憾,xlsx引擎不支持s DBSASTYPE选项。导入Excel的其他引擎具有DBSASTYPE选项。这应该使您能够告诉SAS将列作为数字变量导入,即使该列看到字符值也是如此。如果您希望将单元格中的所有文本值都转换为漏掉,那可以解决问题。但是有可能它仍然会将‘0等同于0。我远离SAS,因此无法进行测试。

答案 1 :(得分:0)

选项:

〜(波浪号)格式修饰符使您可以读取和保留单引号。

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;

enter image description here