如何在SAS中导入含空格与逗号双分隔符的.scores文件?
这种同时用空格和逗号当分隔符的文件,确实会让常规的PROC Import直接罢工——我之前踩过这个坑,给你两个靠谱的解决方案:
解决方案1:用INFILE语句手动指定混合分隔符
SAS的INFILE语句支持直接定义多个分隔符,完全适配你的场景。假设你的文件每行是固定数量的字段(比如示例里的4个字段:832783_9399、973299、03200、238003),可以这么写代码:
data scores_data; /* 替换成你的文件实际路径 */ infile "C:\your_folder\your_file.scores" delimiters=' ,'; /* 根据字段实际类型调整:$代表字符型,数字字段去掉$即可 */ input var1 $ var2 $ var3 $ var4 $; run;
小提示:
delimiters=' ,'里的空格和逗号顺序不影响,SAS会自动把这两个符号都识别为字段分隔符。- 如果字段里有被引号包裹的内容(比如字段本身包含空格/逗号),记得加上
DSD参数:infile ... delimiters=' ,' dsd;,这样SAS会忽略引号内部的分隔符。 - 测试时可以加
obs=10参数只读取前10行:infile ... obs=10;,避免浪费时间处理整个文件。
解决方案2:先预处理统一分隔符(适合字段数不固定的情况)
如果你的文件字段数量不固定,或者存在连续空格/逗号的情况,先把所有分隔符统一成一种会更稳妥:
Windows环境(用PowerShell预处理)
先把文件里的逗号替换成空格,再压缩连续的空格:
(Get-Content "C:\your_folder\your_file.scores") -replace ',', ' ' | ForEach-Object { $_ -replace '\s+', ' ' } | Set-Content "C:\your_folder\processed_scores.scores"
然后用常规PROC Import导入处理后的文件:
proc import datafile="C:\your_folder\processed_scores.scores" out=scores_data dbms=dlm replace; delimiter=' '; run;
Linux/Unix环境(用SED预处理)
用SED命令一键替换并压缩分隔符:
sed 's/,/ /g; s/ */ /g' your_file.scores > processed_scores.scores
之后同样用PROC Import导入处理后的文件即可。
内容的提问来源于stack exchange,提问作者AnkP
相关产品推荐
相关产品推荐

