您的位置:

用SAS读取家庭调查表资料的方法

2022-07-29
来源:求医网
在医学研究中,常常遇到家庭情况调查资料的分析。数据分析中,可能要根据不同的特征如性别或不同年龄段进行研究,同时又要与家庭背景相联系。这时,首先要对每个人创建一条记录,这个记录中必含有家庭情况,如家庭地址,然后读取个人信息变量。

现有文件CENSUS,含有二个家庭及其家庭成员的记录。H表示家庭,P表示个人:

H321S.MAINST

PMARYE21 F

PWILLIAMM23 M

PSUSANK3 F

H324S.MAINST

PTHOMASH79 M

PWALTERS46 M

PALICEA42 F

PJOY20 F

PJOHNS16 M

PPAULR12 M

若要将每个人的记录中含有家庭地址并输出到一个SAS数据集中,程序如下:

DATAPEOPLE(DROP=TYPE);

RETAINADDRESS;

INFILECENSUS;

INPUT@1TYPE$@;

IFTYPE=‘H’THENDO;

INPUT@3ADDRESS$20.

RETURN;

END;

ELSEIFTYPE=‘P’ THEN DO;

INPUT@3NAME$10.AGE2.+1SEX$1.;

OUTPUT;

END;

PROC RPINT;RUN;

@符号用于读记录并检查记录的类型。RETAIN将ADDRESS的值读进每个人的记录中。RETURE的作用是当TYPE为H时,从记录中读完ADDRESS后,返回另一个记录的第一步。

运行结果省略。

如果调查表文件中含有家庭成员数,那么可用DO循环创建SAS数据集。例如,文件DATAIN中有二条记录,每个记录中既有家庭情况又有个人情况。还有一个字段表示家庭成员数:

321S.MAINST3MARYE21FWILLIAMM23 MSUSANK 3 F

324S.MAINST6THOMASH79MWALTERS46MALICE A

42FJOY20FJOHNS16MPAULR12 M

对于这样的资料,有两种方法创建的SAS数据集。当知道所有记录中最多的家庭成员数时,用下列方法:SAS中每条记录对应一个家庭,一个人对应于一个变量。当家庭成员数少于最多的家庭成员时,变量为缺省值。程序如下:

DATAHOUSES;

INFILEDATAIN;

ARRAYNAME{6}$10NAME1-NAME6;

ARRAYAGE{6}AGE1-AGE6;

ARRAYSEX{6}$SEX1-SEX6;

INPUTADDRESS$15.NUM2.+1@;

END;

PROCPRINT;RUN;

第一个INPUT语句读ADDRESS和NUM值。@符号的作用是保持指针直到下个INPUT语句。三个ARRAY语句用于相应的变量NAME,AGE和SEX。

运行结果省略。

第二种方法是使每个人单独成为一条记录,并包含家庭情况。程序如下:

DATAPERSON;

INFILEDATAIN;

RETAINADDRESS;

INPUTADDRESS$15.NUM2.+1@;

DOⅠ=1TONUM;

INPUTNAME$10.AGE2.+1SEX$1.+1@;OUTPUT;

END;

PROCPRINT;RUN;

这个数据集合有较多的记录和较少的变量。没有缺省值。OUTPUT的使用,使每个人变成数据集中的一条记录。

运行结果省略。