如何通过SAS生成含Var、Type、Miss_val、Dis_val的规整数据表?
SAS生成指定格式变量统计表格解决方案
需求说明
需要生成仅包含Var、Type、Miss_val、Dis_val四列的规整数据表,示例输出如下:
| Var | Type | Miss_val | Dis_val |
|---|---|---|---|
| Make | Character | 0 | 38 |
尝试过的无效代码
%macro task_Oct(set,col_name); proc sql; select nmiss(&col_name) as Miss_val, count(distinct &col_name) as Dis_val from &set; quit; proc contents data=&set (keep=&col_name); run; %mend task_Oct; %task_Oct(sashelp.cars,Make)
修正后的实现代码
%macro task_Oct(set, col_name); /* 提取变量类型信息并转换为文字描述 */ proc contents data=&set (keep=&col_name) out=var_info(keep=name type) noprint; run; data var_info; set var_info; Var = upcase("&col_name"); Type = ifc(type=2, 'Character', 'Numeric'); drop name type; run; /* 计算缺失值与唯一值数量,存入宏变量 */ proc sql noprint; select nmiss(&col_name) as Miss_val, count(distinct &col_name) as Dis_val into :miss_val, :dis_val from &set; quit; /* 合并信息生成目标数据集 */ data target_table; set var_info; Miss_val = &miss_val; Dis_val = &dis_val; format Miss_val Dis_val 8.; run; /* 打印规整格式的结果 */ proc print data=target_table noobs label; label Var='Var' Type='Type' Miss_val='Miss_val' Dis_val='Dis_val'; run; %mend task_Oct; /* 调用宏生成结果 */ %task_Oct(sashelp.cars, Make)
代码说明
- 通过
proc contents获取变量的类型代码,用ifc函数将代码转换为Character或Numeric的文字描述 - 用
proc sql计算指定变量的缺失值数量(nmiss)和唯一值数量(count(distinct)),并将结果存入宏变量 - 合并类型信息与统计值,生成包含目标四列的数据集
- 最后用
proc print输出无序号、带列标签的规整表格
内容的提问来源于stack exchange,提问作者saslearner
相关产品推荐
相关产品推荐

