如何在SAS中便捷查看各列观测数?实现类似Python pandas info()的效果
在SAS中实现类似Pandas info()的功能
要在SAS中得到类似Pandas info()的输出(包含变量名、非缺失值数量、数据类型等信息),可以用以下几种简便方法:
方法1:使用PROC SQL生成汇总(最简洁高效)
通过查询SAS字典表直接拼接变量信息和非缺失计数,无需额外数据步处理:
/* 替换WORK.MY_DATA为你的数据集名(库名.表名) */ proc sql; create table work.final_info as select v.varnum as 序号, v.name as 变量名, (select count(&v.name.) from work.my_data) as 非缺失值数量, (select count(*) - count(&v.name.) from work.my_data) as 缺失值数量, case v.type when 1 then 'Numeric' when 2 then 'Character' end as 数据类型 from dictionary.columns v where v.libname='WORK' and v.memname='MY_DATA' /* 库名和表名需大写 */ order by v.varnum; quit; /* 输出类似Pandas info()的格式化结果 */ title "数据集信息: work.my_data"; proc print data=work.final_info noobs label; label 序号='#' 变量名='Column' 非缺失值数量='Non-Null Count' 缺失值数量='Missing Count' 数据类型='Dtype'; run;
方法2:PROC MEANS + 数据步组合
如果需要更灵活的自定义输出,可结合PROC MEANS统计缺失值和PROC CONTENTS获取变量类型:
proc means data=work.my_data n nmiss noprint; output out=work.missing_stats n= nmiss= / autoname; run; proc transpose data=work.missing_stats out=work.transposed_stats(rename=(_NAME_=变量名 COL1=非缺失值数量 COL2=缺失值数量)); run; proc contents data=work.my_data out=work.vars_info(keep=name type) noprint; run; data work.final_info; merge work.transposed_stats work.vars_info(rename=(name=变量名)); by 变量名; length 数据类型 $10; 数据类型 = ifc(type=1, 'Numeric', 'Character'); run; proc print data=work.final_info noobs label; label 变量名='Column' 非缺失值数量='Non-Null Count' 缺失值数量='Missing Count' 数据类型='Dtype'; run;
方法3:宏循环快速输出文本格式
若只需在日志窗口快速查看结果,可使用宏遍历所有变量并输出统计信息:
%macro var_info(data=); %let dsid=%sysfunc(open(&data.)); %let total_obs=%sysfunc(attrn(&dsid., nobs)); %let nvars=%sysfunc(attrn(&dsid., nvars)); title "Dataset Info: &data."; data _null_; put "观测总数: &total_obs."; put "变量总数: &nvars."; put; put "# Column Non-Null Count Dtype"; put "--- -------------- -------------- -----"; run; %do i=1 %to &nvars.; %let var=%sysfunc(varname(&dsid., &i.)); %let type=%sysfunc(vartype(&dsid., &i.)); proc sql noprint; select count(&var.) into :non_null from &data.; quit; data _null_; dtype=ifc("&type."='N', 'Numeric', 'Character'); put &i. +(-1) " " "&var." +(-16) " " &non_null. +(-12) " " dtype; run; %end; %let rc=%sysfunc(close(&dsid.)); %mend; /* 调用宏查看数据集信息 */ %var_info(data=work.my_data);
以上方法均能覆盖所有变量,输出结果与Pandas info()的核心信息对齐,可根据需求选择使用。
内容的提问来源于stack exchange,提问作者Tamás Godányi
相关产品推荐
相关产品推荐

