用SAS读取家庭调查表资料的方法
作者:陈智 孙高 白抚生
单位:陈智 孙高 中国医科大学(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的使用,使每个人变成数据集中的一条记录。
运行结果省略。, 百拇医药
单位:陈智 孙高 中国医科大学(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的使用,使每个人变成数据集中的一条记录。
运行结果省略。, 百拇医药