You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

避免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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 17:53:12