目的:
绘制出按户主年龄分类的家庭户中曾生子女数和现居子女数
数据:
指标解释:
程序:
libname (数据库所在路径)_;
options nofmterr;
ods listing exclude all;
odshtmlfile=“输出表的路径及名称.xls”;
/*计算个人年龄的过程*/
data basedata;
set (数据库名称) .sample; /*取观测值并组合在一个数据集中*/
age=2010-R4_1;
if R4_2 ge11then age=age-1; /*计算年龄*/
run;
proc sort; /*按照户编码排序*/
by H1;
run;
/*计算曾生子女数的过程*/
data one; /*构造反映曾生子女数的cs、csm、csf的变量*/
set basedata(keep=R1 R2 R3 R26_1R26_2 H1); /* R1为人代码;R2为与户主关系;R3为性别;R26_1为曾生男孩数;R26_2为曾生女孩数;H1为户代码*/
if R2=0 and R3=2 then cs=R26_1+ R26_2; /*计算女性户主曾生男数*/
if R2=0 and R3=2 then csm=R26_1; /*计算女性户主曾生男数*/
if R2=0 and R3=2 then csf=R26_2; /*计算女性户主曾生女数*/
if R2=1 and R3=2 then cs=R26_1+ R26_2; /*计算男性户主有配偶家庭曾生女数*/
if R2=1 and R3=2 then csm=R26_1; /*计算男性户主有配偶家庭曾生男数*/
if R2=1 and R3=2 then csf=R26_2; /*计算男性户主有配偶家庭曾生女数*/
proc sort; /*按照户编码排序*/
by H1;
run;
/*计算现居子人数的过程*/
data one;
input xj xjm xjf @ @;
xj=0;
xjm=0;
xjf=0;
if R2=2 then xj=xj+1;
if R2=2 and R3=1 then xjm=xjm+1;
if R2=2 and R3=1 then xjf=xjf+1;
by H1;
return;
proc sort; /*按照户编码排序*/
by H1;
Run;
data basedata csxj ;
merge basedata cs csm csf xj xjm xjf;
by H1;
group=substr(cx,1,2)+0; /*构造城乡标志变量group(数值型),1为城镇,2为乡村*/
run;
procformat;
value $R24_fmt ‘1’=’未婚’ ’2’=’有配偶’ ’3’=’离婚’ ’4’=’丧偶’ ’other’ = ‘缺失/不适用’;
value cs_fmt ‘0’=’未生育’ ‘1’=’曾生育1人’ ’2’=’ 曾生育两人’ ’3’=’ 曾生育三人’ ’4’=’ 曾生育四人’ ’5’ = ‘曾生育五人’ ’6’ = ‘曾生育六人’ ’7’ = ‘曾生育七人’ ’other’ = ‘曾生育八人及以上’;
value csm_fmt ‘0’=’未生育男’ ‘1’=’曾生育1男’ ’2’=’ 曾生育两男’ ’3’=’ 曾生育三男’ ’4’=’ 曾生育四男’ ’5’ = ‘曾生育五男’ ’6’ = ‘曾生育六男’ ’7’ = ‘曾生育七男’ ’other’ = ‘曾生育八男及以上’;
value csf_fmt ‘0’=’未生育女’ ‘1’=’曾生育1女’ ’2’=’ 曾生育两女’ ’3’=’ 曾生育三女’ ’4’=’ 曾生育四女’ ’5’ = ‘曾生育五女’ ’6’ = ‘曾生育六女’ ’7’ = ‘曾生育七女’ ’other’ = ‘曾生育八女及以上’;
value xj_fmt ‘0’=’现居0人’ ‘1’=’现居1人’ ’2’=’ 现居两人’ ’3’=’ 现居三人’ ’4’=’ 现居四人’ ’5’ = ‘现居五人’ ’6’ = ‘现居六人’ ’7’ = ‘现居七人’ ’other’ = ‘现居八人及以上’;
value xjm_fmt ‘0’=’ 现居0男’ ‘1’=’现居1男’ ’2’=’ 现居两男’ ’3’=’ 现居三男’ ’4’=’ 现居四男’ ’5’ = ‘现居五男’ ’6’ = ‘现居六男’ ’7’ = ‘现居七男’ ’other’ = ‘现居八男及以上’;
value xjf_fmt ‘0’=’ 现居0女’ ‘1’=’现居1女’ ’2’=’ 现居两女’ ’3’=’ 现居三女’ ’4’=’ 现居四女’ ’5’ = ‘现居五女’ ’6’ = ‘现居六女’ ’7’ = ‘现居七女’ ’other’ = ‘现居八女及以上’;
run;
/*制作按户主年龄分类的家庭户曾生子女与现居子女状况列联表的宏程序*/
%macro tabulate(title,cx,gender);
title “&title. 按户主年龄分类的家庭户曾生子女与现居子女状况”;
data basedata_csxj1;
set basedata_ csxj;
if R2=0;
if group^=&cx;
if R3=&gender;
run;
proc tabulate;
class age cs csm csf xj xjm xjf R24;
table all age,(all R24) (all cs xj) (all csm xjm) (all csf xjf) ;
format R24 $ R24_fmt. cs cs_fmt. csm csm_fmt. csf csf_fmt. xj xj_fmt. xjm xjm_fmt. xjf xjf_fmt.;
keylabel all=’总计’
label R24=”婚姻状况” age=”年龄”;
run;
%mend tabulate;
% tabulate(全国男性,0,1);
% tabulate(全国女性,0,2);
% tabulate(城镇男性,2,1);
% tabulate(城镇女性,2,2);
% tabulate(乡村男性,1,1);
% tabulate(乡村女性,1,2);
odshtml close;
ods listing exclude none;