当前位置: 首页 > 期刊 > 《中国卫生统计》 > 1999年第2期
编号:10260009
用SAS读取家庭调查表资料的方法
http://www.100md.com 《中国卫生统计》 1999年第2期
     作者:陈智 孙高 白抚生

    单位:陈智 孙高 中国医科大学(110001); 白抚生 沈阳市卫生防疫站(110031)

    关键词:

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

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

    H 321 S.MAIN ST

    P MARY E 21 F

    P WILLIAM M 23 M

    P SUSAN K 3 F

    H 324 S.MAIN ST

    P THOMAS H 79 M

    P WALTER S 46 M

    P ALICE A 42 F

    P JOY 20 F

    P JOHN S 16 M

    P PAUL R 12 M

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

    DATA PEOPLE(DROP=TYPE);

    RETAIN ADDRESS;

    INFILE CENSUS;

    INPUT @1 TYPE $ @;

    IF TYPE=‘H’ THEN DO;

    INPUT @3 ADDRESS $20.

    RETURN;

    END;

    ELSE IF TYPE=‘P’ THEN DO;

    INPUT @3 NAME $10. AGE 2. +1 SEX$1.;

    OUTPUT;

    END;

    PROC RPINT;RUN;

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

    运行结果省略。

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

    321 S.MAIN ST 3 MARY E 21 F WILLIAM M 23 M SUSAN K 3 F

    324 S.MAIN ST 6 THOMAS H 79 M WALTER S 46 M ALICE A

    42 F JOY 20 F JOHN S 16 M PAUL R 12 M

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

    DATA HOUSES;

    INFILE DATAIN;

    ARRAY NAME{6} $ 10 NAME1-NAME6;

    ARRAY AGE{6} AGE1-AGE6;

    ARRAY SEX{6} $SEX1-SEX6;

    INPUT ADDRESS $15. NUM2. +1 @;

    END;

    PROC PRINT;RUN;

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

    运行结果省略。

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

    DATA PERSON;

    INFILE DATAIN;

    RETAIN ADDRESS;

    INPUT ADDRESS $15. NUM 2. +1 @;

    DO Ⅰ=1 TO NUM;

    INPUT NAME $10. AGE 2. +1 SEX $1. +1 @;OUTPUT;

    END;

    PROC PRINT; RUN;

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

    运行结果省略。, 百拇医药