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数据集将符合你的预期:
| name | ht | ht2 |
|---|---|---|
| dick | 20.55 | . |
| sam | 2.5 | 2.5 |
| roger | 2 | 2 |
| peter | 200 | 200 |
内容的提问来源于stack exchange,提问作者123456
相关产品推荐
相关产品推荐

