为了制作一个方差分析相关的课件,去美国CDC网站下载了几个数据集并进行了整合。过程很简单,记录如下:
因为要用到糖化血红蛋白检测结果以及人种、年龄、是否糖尿病患者等数据,所以要下载3个数据集:
先进入站点:NHANES Questionnaires, Datasets, and Related Documentation (cdc.gov)
选择一个比较近的年份 NHANES 2017-2018:
下载列表中的第1个,人口统计学数据:
,
说明文件(Doc File,html格式)和数据文件(Data File,SAS的xpt格式)都下载下来备用。
然后下载了实验室检查数据(Laboratory Data)中的糖化血红蛋白(Glycohemoglobin)数据,以及问卷数据(Questionnaire Data)中的糖尿病(Diabetes)问卷数据。
由于SAS没有一次性转换或导入多个XPT文件的命令,只好写了一个小程序,执行动态转换:
/*定义SAS数据集位置;*/
libname data "F:\TeachingData\Nhanes";
/*定义XPT文件所在目录*/
%let dir=F:\TeachingData\Nhanes\xpt\2017-2019;
/*扫描目录中的xpt文件并保存到xpts数据集中;*/
filename DIRLIST pipe "dir &dir\*.XPT /b ";
data xpts ;
infile DIRLIST lrecl=200 truncover;
input file_name $100.;
run;
/*将所有文件名生成宏变量并执行多次copy;*/
data _null_;
set xpts end=end;
count+1;
call symputx('xpt'||put(count,4.-l),file_name);
if end then call symputx('max',count);
run;
%macro readxpt(in, out);
%do i=1 %to &max;
libname xpt xport "&dir\&xpt&i" access=readonly;
proc copy inlib=&in outlib=&out;
run;
%end;
%mend readxpt;
/*这也够麻烦的!;*/
%readxpt(xpt, data);
剩下的就简单了,直接合并数据集:
*2017-2020的数据多,就改用这几个数据集了;
data final;
merge data.P_Demo data.P_Diq data.P_Ghb;
by SEQN;
if missing(LBXGH) then delete;
run;
最后得到的数据集中,共9737条数据;再剔除糖尿病患者,就得到我想要的数据了。
为什么不用国内的数据?其实我也想用。。。
添加评论