从excel导入时在SAS中保留换行符(换行符)
我正在使用内置的导入数据向导从excel导入数据集。但是,在SAS中查看数据时,带有换行符的单元格将所有换行符(alt+Enter)替换为句点(.) 例如,在excel中:从excel导入时在SAS中保留换行符(换行符),excel,import,sas,linefeed,Excel,Import,Sas,Linefeed,我正在使用内置的导入数据向导从excel导入数据集。但是,在SAS中查看数据时,带有换行符的单元格将所有换行符(alt+Enter)替换为句点(.) 例如,在excel中: “示例文本 使用新行“ SAS将读取为: “示例文本.带新行” 通常换行符或回车符由空格代替,其中十六进制代码(如果将文本格式化为十六进制)为0A。当我使用公式将excel中的文本转换为excel中的十六进制时,新行提要也显示为0A 但是,我的文本中周期的十六进制代码(excel中的换行符)是2E,而不是预期的0A。这使我无
“示例文本
使用新行“ SAS将读取为:
“示例文本.带新行” 通常换行符或回车符由空格代替,其中十六进制代码(如果将文本格式化为十六进制)为0A。当我使用公式将excel中的文本转换为excel中的十六进制时,新行提要也显示为0A 但是,我的文本中周期的十六进制代码(excel中的换行符)是2E,而不是预期的0A。这使我无法将它们与正常句号区分开来,这意味着没有可能的解决方法。还有其他人遇到过这个问题吗?在SAS中是否有更改/设置默认换行符的选项 我的导入代码(为简单起见,变量替换为“文本”)供参考:
data work.table;
length
text $ 50;
label
text = "Text"
format
text $CHAR50;
informat
text $CHAR50;
infile 'path/to/file'
lrecl=1000
encoding='LATIN9'
termstr=CRLF
dlm='7F'x
missover
dsd;
input
text $CHAR50;
run;
SAS Viewer不会呈现所谓的非打印内容(characters我不建议使用导入向导;现在有更好的工具。EG的导入向导在SAS工具中的工作方式是独一无二的,实际上只是为不是程序员的数据分析师提供了一种快速导入数据的方法;对于生产工作来说,它不够健壮 在这种情况下,SAS读取中数据的方法非常简单。它所做的是将其转换为带分隔符的文件,并且不能在其中非常干净地处理LF字符。与其保留它们,不如保留它们,这是可能的,但风险更大(请记住,这必须适用于任何传入的文件),它所做的是将这些转换为句点 您将在它生成的程序的注释中看到: 电子表格数据中嵌入的一些字符被删除 翻译成其他字符以避免传输 错误 在这种情况下,它指的是
LF
字符
我所知道的唯一解决方法是:
- 自己将文件从Excel转换为CSV,然后读入
- 使用对PC文件的访问(通过PROC导入或导入向导中的复选框)
这两种方法都可以让您读取换行符。我不建议使用导入向导;现在有更好的工具。它可能会损坏文件,但如果是,我们对此无能为力。您是否可以使用
PROC Import
?以及-只是想澄清一下:这是.xls
或.xlsx
文件,您正在使用Base SAS导入向导,该向导生成如上所述的代码?还是您编写上述代码以读取的分隔文本文件?我们使用csv文件导入和导出-从未出现过问题。这是我从7F分隔符中想到的。我认为您在这里运气不佳-找到不同的选项。您的工作可能需要授权访问PC文件。例如,“导入向导”不适用于严肃的工作。如果您不能使用proc import
,这通常是因为您在服务器上运行代码,但无法访问该服务器上的文件夹或从该服务器可见。如果您只需要此向导一次,他们可能会愿意将您的文件放到服务器上这不适用,也不是问题所在。
proc import datafile='sample.xlsx' out=work.have;
run;
proc print data=have;
var text / style = [fontsize=14pt];
format text $hex48.;
run;