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

将Excel数据导入SAS时如何保留单引号,sas,Sas,我正在使用Proc导入将Excel电子表格导入SAS: Proc Import out=OUTPUT Datafile = "(filename)" DBMS=XLSX Replace; Range = "Sheet1$A:Z"; run; “我的数字数据”列包含Excel中以数字形式保存的值和以文本形式保存的“0”值的混合,即带有前导撇号/单引号。当SAS导入这些值时,它将对它们一视同仁(即,它返回值的字符串,去掉前导撇号) 当Excel将“0”值视为缺失值,而SAS将其视为0时,这会导致应

我正在使用Proc导入将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并没有真正把领先的撇号看作是价值的一部分。这只是一种疯狂的方式来表示一个值是一个文本字符串(而不是数字)。当SAS导入数据时,它会识别引号不是值的一部分。因此,如果你有一个Excel列,在某些单元格中有“0”,在其他单元格中有“0”,那么它将以字符的形式出现,我认为你无法区分它们之间的区别

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

选项:

~(tilde)格式修饰符允许您读取和保留单引号

是否可以将.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;

您能让他们用无效数字替换字符串零吗?比如字符串空格或字符串句点。这就是我必须要做的。将数据从源提取到Excel中的Excel加载项(如我所说,不要问…)有一个选项来配置如何返回缺少的值。这在默认情况下设置为0,现在我已设置为。{period}在我的摘录中,解决了这个问题;我不知道~modifier。但是,最终我希望导入一个xlsx电子表格,避免将该电子表格保存为csv,以便尽可能自动化作业。谢谢Quentin。我找到了一个解决方案(似乎是对Tom上述评论的回应),解决了我眼前的问题,但遗憾的是,在导入过程中,在SAS中没有更可靠的方法来实现这一点。