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

SAS Informat 3.的含义及INPUT函数使用异常问题咨询

问题解决:SAS中INPUT(ht,3.)返回全缺失值的原因及修正

错误原因

INPUT函数的核心作用是将字符型数据转换为数值型,它的第一个参数要求是字符型变量/值。你的ht是数值型变量,直接传入INPUT时,SAS会自动将数值转换为字符,但使用默认的BEST12.格式,转换后的字符会带有前导空格(比如20.55会变成' 20.55')。用3. informat读取时,只能截取前3个字符(多为空格),无法解析为有效数值,因此全部返回缺失值。

另外你对3. informat的理解有偏差:它是指读取最多3个字符长度的内容转换为数值,并非“保留包含小数在内共3位的数值”。

修正代码

要实现你预期的效果(字符长度不含前导空格时≤3的数值保留,否则返回缺失),可以先将数值转换为无空格的字符,判断长度后再用INPUT转换:

data left;
    input name $ ht;
    datalines;
dick  20.55 
sam  2.5
roger  2 
peter 200 
;
run;

data left2;
    set left;
    /* 将数值转为无前后空格的字符 */
    char_ht = strip(put(ht, best12.));
    /* 判断字符长度,符合条件则转换为数值 */
    if length(char_ht) <= 3 then ht2 = input(char_ht, 3.);
    else ht2 = .;
    drop char_ht; /* 可选:删除中间变量 */
run;

验证结果

执行修正后的代码后,left2数据集将符合你的预期:

namehtht2
dick20.55.
sam2.52.5
roger22
peter200200

内容的提问来源于stack exchange,提问作者123456

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 00:05:59