SAS中含自定义格式$CDCLOANTI的字符列用COMPRESS删冒号返回空列问题
问题分析与解决方法
核心原因
SAS的自定义格式(如$CDCLOANTI)仅控制变量的显示效果,不会修改变量的原始存储值。COMPRESS函数直接作用于变量的底层存储数据,而非格式化后的显示内容。你看到的带冒号的内容是格式渲染后的结果,原始存储的Prenom值可能为空,或者本身不含冒号,导致COMPRESS返回空列。
解决步骤
1. 确认变量的原始存储值
先取消格式查看真实数据:
proc print data=table1 noobs; var Prenom; format Prenom; /* 取消自定义格式,显示原始值 */ run;
通过这个步骤可以明确Prenom实际存储的内容,判断是否是原始值为空导致结果异常。
2. 处理格式化后的显示值
如果需要针对格式化后的带冒号内容处理,先用PUT函数将格式渲染后的结果转为字符值,再执行COMPRESS:
data WORK.p; set table1; /* 先获取格式化后的字符串,再删除冒号 */ colonne = COMPRESS(put(Prenom, $CDCLOANTI.), ':'); run;
PUT(Prenom, $CDCLOANTI.)会生成和你看到的格式化显示一致的字符串,之后用COMPRESS即可正确删除冒号。
内容的提问来源于stack exchange,提问作者nadal
相关产品推荐
相关产品推荐

