SAS使用proc json导出commax10.1格式数据集的空格与空值问题
SAS导出JSON的两个常见问题解决方案
数值引号内多余空格去除方案
你遇到的空格是commax10.1格式自带的宽度补位导致的:该格式总宽度为10位,默认右对齐,不足10位的内容会自动补前导空格。proc json的trimblanks参数仅对原生字符型变量生效,开启fmtnumeric后输出的格式化数值不会触发空格裁剪逻辑。
解决方案是提前将数值变量转换为已经格式化并去除了前后空格的字符型变量,无需开启fmtnumeric参数即可保留格式和外层引号。
null值替换为空字符串方案
SAS数值缺失值.导出JSON时默认输出为null,只需要在预处理步骤中对缺失值做判断,直接赋值为空字符串即可。
完整可运行代码
/* 构建原始测试数据集 */ data testdata_; input var1 var2 var3; format _all_ commax10.1; datalines; 3.1582 0.3 1.8 21 . . 1.2 4.5 6.4 ; run; /* 预处理数据集:批量处理数值变量,格式化、去空格、替换缺失值 */ data testdata_pre; set testdata_; /* 定义数值变量数组和目标字符变量数组,变量较多时可通过字典表批量生成变量列表 */ array num_vars[*] var1 var2 var3; array char_vars[*] $10 var1_char var2_char var3_char; do i=1 to dim(num_vars); if num_vars[i] = . then char_vars[i] = ""; else char_vars[i] = strip(put(num_vars[i], commax10.1)); end; /* 保留处理后的变量并还原原始变量名 */ keep var1_char var2_char var3_char; rename var1_char=var1 var2_char=var2 var3_char=var3; run; /* 导出JSON */ proc json out = 'G:\test.json' pretty nosastags trimblanks keys; export testdata_pre; run;
上述代码导出的JSON完全符合需求:数值保留commax10.1格式、引号内无多余空格、原缺失值位置输出为空字符串""。
内容的提问来源于stack exchange,提问作者Leksa99
相关产品推荐
相关产品推荐

