避免SAS截断末尾空格:读取TXT文件保留指定长度含空格变量
解决SAS读取文本时字符变量末尾空格被截断的问题
问题原因
SAS默认的字符输入格式($)会自动截断变量末尾的空格,导致原本应保留的最后5个空格被去除,最终REG_ENVIO长度变为157(162-5)。
解决方案
方法1:使用$CHAR格式读取并提前定义变量长度
通过$CHAR格式强制保留所有字符(包括末尾空格),同时提前定义变量长度确保有足够存储空间:
data t1; length REG_ENVIO $162; /* 明确变量长度为162 */ infile "&path./&file_name..txt" lrecl=261 firstobs=2; input REG_FULL $ 1-261 REG_ENVIO $CHAR162. 1-162 /* 使用$CHAR格式保留末尾空格 */ CODNUM $ 129-138 CONTRATO $ 23-31 FECHA_ENVIO $ 32-39 ; run; data t1_check; set t1; kk = length(REG_ENVIO); /* 此时kk应为162 */ kk_trim = length(strip(REG_ENVIO)); /* 可查看去掉空格后的长度(应为157) */ run;
方法2:从完整读取的字符串中提取
利用已读取的完整行字符串REG_FULL,通过substr函数提取前162个字符,天然保留空格:
data t1; infile "&path./&file_name..txt" lrecl=261 firstobs=2; input REG_FULL $ 1-261 CODNUM $ 129-138 CONTRATO $ 23-31 FECHA_ENVIO $ 32-39 ; REG_ENVIO = substr(REG_FULL, 1, 162); /* 直接从完整字符串截取,保留所有字符 */ run;
方法3:使用INFORMAT语句统一指定格式
提前定义$CHAR输入格式,再应用到变量上:
data t1; informat REG_ENVIO $CHAR162.; length REG_ENVIO $162; infile "&path./&file_name..txt" lrecl=261 firstobs=2; input REG_FULL $ 1-261 REG_ENVIO 1-162 CODNUM $ 129-138 CONTRATO $ 23-31 FECHA_ENVIO $ 32-39 ; run;
验证说明
运行t1_check数据集后,kk变量的值应为162,证明末尾的5个空格已被保留。
内容的提问来源于stack exchange,提问作者Cheminn
相关产品推荐
相关产品推荐

