SAS读取文件时将特定空格视为字符的实现问询
SAS读取含空格的字段(不将空格视为列分隔符)
要实现将字段内的空格作为字符保留、不跳转到下一列的需求,你可以放弃原固定列输入的方式,改用以下两种直观方法:
方法1:用SCAN函数按多空格分隔提取字段
通过将整行数据读入字符变量,再以连续空格作为字段分隔符,单个空格会被保留在字段内:
data try1; length A $3 B $3 C $3 D $2 E $2; input @1 line $char80.; /* 以两个空格为分隔符,提取各字段,单个空格保留在字段中 */ A = scan(line, 1, ' ', 'm'); B = scan(line, 2, ' ', 'm'); C = scan(line, 3, ' ', 'm'); D = scan(line, 4, ' ', 'm'); E = scan(line, 5, ' ', 'm'); /* 若需将部分字段转为数值型,可添加:A_num = input(A, 3.); */ drop line; cards; 33 2 2 66 89 99 ; run;
- 核心参数
'm'表示将连续的分隔符视为一个,确保单个空格不会被当作分隔符。
方法2:用INFILE的DLM+DSD选项读取
通过指定分隔符为空格,配合DSD选项实现连续空格作为字段分隔,单个空格保留:
data try1; infile cards dlm=' ' dsd truncover; length A $3 B $3 C $3 D $2 E $2; input A B C D E; cards; 33 2 2 66 89 99 ; run;
dlm=' '指定空格为分隔符,dsd会自动将连续空格合并为一个分隔符,字段内的单个空格会被保留。
原代码问题说明
你之前的固定列输入(input A 1-3 B 7-9...)依赖严格的列位置匹配,但示例数据行的内容并未对应预设的列位置,且固定列读取会直接忽略列内空格,无法实现保留空格的需求。
内容的提问来源于stack exchange,提问作者stat
相关产品推荐
相关产品推荐

