Stata 期末考试上机操作题之R版

Table1:(共10分)

1.将数据导入stata,保存在新建的桌面文件夹中,数据命名为table1_org.(2分)

setwd('C:\\Users\\fanning1207\\Desktop\\STATA') 
library(foreign)
table1_org=read.dta('table1_org.dta')

2.建立新的dofile,命名为table1_org.do,保存在新建的桌面文件夹dataclean-dofile-original文件夹中,调用table1_org.dta并完成如下任务:

2.1 将所有变量贴上标签(1分)

library(Hmisc)
label(table1_org$code)='问卷编码'
label(table1_org$prov)='省'
label(table1_org$county)='县'
label(table1_org$town)='乡镇'
label(table1_org$village)='村'

2.2 生成新变量provcode,其中湖北赋值为1,湖南赋值为2,四川赋值为3,江西赋值为4.(2分)

table1_org$prov=factor(table1_org$prov)
levels(table1_org$prov)
## [1] "湖北" "湖南" "江西" "四川"
table1_org$provcode=factor(table1_org$prov,levels=levels(table1_org$prov),labels=c(1,2,4,3))

2.3.生成各个省的虚拟变量,新变量名分别为其省份的拼音。(3分)

add_table1=model.matrix(~factor(prov)-1,table1_org)
table1_org=merge(table1_org,as.data.frame(add_table1))
names(table1_org)[7:10]
## [1] "factor(prov)湖北" "factor(prov)湖南" "factor(prov)江西"
## [4] "factor(prov)四川"
names(table1_org)[7:10]=c('hubei','hunan','jiangxi','sichuan')

2.4.去掉县、乡镇和村三个变量 (1分)

table1_org=table1_org[-3:-5]

2.5.将数据保存在文件夹中,命名为table1_cln.dta. (1分)

Table2: (共15分)

3.将数据导入stata,保存在新建的桌面文件夹dataclean-data—original 文件夹中,数据命名为table2_org. (1分)

table2_org=read.dta('table2_org.dta')

4. 建立新的dofile,命名为table2_org.do, 保存在新建的桌面文件夹中,调用table2_org.dta并完成如下任务:

4.1 将所有变量贴上标签 (1分)

4.2 将a1, a5, a6 ,a7 ,a8分别重命名为familysize, gender, birthyear, educ,training.(2分)

names(table2_org)[2:6]=c('familysize','gender','birthyear','educ','training')

4.3 性别中1代表男性,2代表女性,在其基础上产生虚拟变量female,使得0为男性,1为女性。(2分)

table2_org$gender=factor(table2_org$gender)
levels(table2_org$gender)
## [1] "1" "2"
table2_org$female=factor(table2_org$gender,levels=levels(table2_org$gender),labels=c(0,1))

4.4 将female贴上男、女标志,使得tab female的时候其显示为男和女。(2分)

table2_org$female=factor(table2_org$female,levels = c(0,1),labels = c('男','女'))

4.5 将出生年份中的汉字改成对应数字,并在其基础上产生新变量age, 其中age为2013年减去其出生年份。(4分)

table2_org$birthyear
##  [1] "1964"     "1950"     "1947"     "1950"     "一九六二" "1957"    
##  [7] "一九七二" "1972"     "1959"     "一九五八" "1984"     "1950"    
## [13] "1964"     "1953"     "1971"     "1951"     "1972"     "1940"    
## [19] "1965"     "1980"
table2_org$birthyear[5]='1962'
table2_org$birthyear[7]='1972'
table2_org$birthyear[10]='1958'
table2_org$birthyear=as.integer(table2_org$birthyear)
table2_org$age=2013-table2_org$birthyear

4.6 将受教育程度中的1.5年改为5年,而问卷编码1220103对应的受教育程度改为6年.(2分)

table2_org$educ[table2_org$educ==1.5]=5
table2_org$educ[table2_org$code==1220103]=6

4.7 将数据保存在data—cleandata文件夹中,命名为table2_cln.dta.(1分)

Table3: (共20分)

5.将数据导入stata,保存在新建的桌面文件夹dataclean-data—original 文件夹中,数据命名为table3_org. (1分)

table3_org=read.dta('table3_org.dta')

6.建立新的dofile,命名为table3_org.do,保存在新建的桌面文件夹dataclean-dofile-original文件夹中,调用table3_org.dta并完成如下任务:

6.1.将所有变量贴上标签 (3分)

6.2.将产量中问卷编码为1220103的缺失值替换为19200,问卷编码为1310102的缺失值替换为10000.生成新变量avprod,单位(公斤/公顷)(提示:1公顷=15亩,1公斤=2斤).(3分)

attach(table3_org)
d14[code==1220103]=19200
d14[code==1310102]=10000
table3_org$avprod=(d14/2)/(d3/15)

6.3.产生新变量labor,其中labor为5个用工的总和,单位(天/公顷)(提示:现在表格中所有用工投入数据为每亩的投入小时数,1天=8小时。)。(4分)

table3_org$labor=15*(d21+d25+d29+d38+d46)/8

6.4.分别产生纯氮、纯磷、纯钾三个新变量,命名为puren, purep, purek,单位:公斤/公顷。其分别为用肥料施用量与肥料所含氮磷钾的比例相乘,然后换算单位。(5分)

d58[d58=='八十斤']='80'
d58=as.integer(d58)
table3_org$puren=(d58*d55)/(100*d3*2/15)
table3_org$purep=(d58*d56)/(100*d3*2/15)
table3_org$purek=(d58*d57)/(100*d3*2/15)
detach(table3_org)

6.5. 将D19,D35分别命名为 npest, nirri。(1分)

names(table3_org)[names(table3_org)=='d19']='npest'
names(table3_org)[names(table3_org)=='d35']='nirri'

6.6.只保留作物名称为“中稻”的观察值 (1分)

table3_org=table3_org[table3_org$d2=='中稻',]

6.7.保留code和所有新生成的变量(包括重命名的变量),去掉其他变量。(1分)

table3_org=table3_org[c('code','npest','nirri','avprod','labor','puren','purep','purek')]

6.8.将数据保存在data—cleandata文件夹中,命名为table3_cln.dta. (1分)

Table4: (共15分)

7.将数据导入stata,保存在新建的桌面文件夹dataclean-data—original 文件夹中,数据命名为table4_org. (1分)

table4_org=read.dta('table4_org.dta')

8.建立新的dofile,命名为table4_org.do,保存在新建的桌面文件夹dataclean-dofile-original文件夹中,调用table4_org.dta并完成如下任务:

8.1.将所有变量贴上标签 (2分)

8.2.将s7中的中文改为对应数字 (2分)

table4_org[,'s7']
##  [1] "70000"  "三千"   "10000"  "260000" "100000" "5000"   "5000"  
##  [8] "200000" "六万"   "50000"  "25000"  "150000" "50000"  "1000"  
## [15] "100000" "150000" "60000"  "70000"  "90000"  "100000" "180000"
## [22] "20000"
table4_org[,'s7'][table4_org[,'s7']=='三千']='3000'
table4_org[,'s7'][table4_org[,'s7']=='六万']='60000'
table4_org$s7=as.integer(table4_org$s7)

8.3.表4中一个问卷编码代表一户人家,生成一个新变量asset,asset代表该户的房屋总产值(注意:有的人家有两处房产)。(6分)

8.4.只保留code和asset两个变量,然后,去掉数据中完全重复的观测值。(即每户只有一行数据)(3分)

library(plyr)
table4_org=ddply(table4_org,.(code),summarize,asset=sum(s7))

8.5. 将数据保存在data—cleandata文件夹中,命名为table4_cln.dta.(1分)

第二阶段:将所有新生成的数据合并,然后按一下要求完成任务:(共40分)

1.建立新的dofile, 命名为alltable_analysis.do保存在dataclean-dofile-analysis文件夹中,dofile的开头统一加上:

(1) Log using “cd/../dataclean/outcome/exam_my name.txt”,

(2)调用数据后加上命令:notes: My name is “自己姓名(中文)”

(3)最后log close (共5分)

2.将table1_cln.dta,table2_cln.dta,table3_cln.dta,table4_cln

.dta这四个数据合并。(10分)

temp1=merge(table1_cln,table2_cln,by='code')
temp2=merge(table3_cln,table4_cln,by='code')
table_all=merge(temp1,temp2,by='code')

3.产生省份和是否培训的二维列联表,表格中的数据为产量的均值。 其表头如下:(8分)

产量(公斤/公顷) 参加过培训 未参加过培训
湖北
湖南
四川
江西
xtabs(avprod~ prov+training, data= table_all)
##       training
## prov           0         1
##   湖北 21875.000 23250.000
##   湖南 12000.000 35375.000
##   江西 22136.363 14250.000
##   四川  6321.429 18000.000

4.使用search和help 下载安装outreg2命令 (5分)

5.分别做如下方程的回归并使用outreg2命令将结果(命名为exam_myname.doc文件,如exam_Caijinyang.doc)输出至dataclean-outcome文件夹中 (10分)

因变量:以下所有方程的因变量均为产量(公斤/公顷)。

自变量:

方程1:training

方程2 : training gender age educ

方程3 : training gender age educ asset

方程4 : training gender age educ asset puren purep purek npest nirri

方程5: training gender age educ asset puren purep purek npest nirri hunan Sichuan Jiangxi

lm_dat=lm(formula = avprod ~ training + gender + age + educ 
          + asset + puren + purep + purek + npest + nirri 
          + Hunan + Sichuan + Jiangxi, data = table_all)
summary(lm_dat)
## 
## Call:
## lm(formula = avprod ~ training + gender + age + educ + asset + 
##     puren + purep + purek + npest + nirri + Hunan + Sichuan + 
##     Jiangxi, data = table_all)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -2136.4  -676.5  -361.0   578.1  3078.0 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)  
## (Intercept)  1.319e+04  5.320e+03   2.479   0.0479 *
## training     2.172e+03  1.198e+03   1.813   0.1197  
## gender       2.204e+03  2.528e+03   0.872   0.4168  
## age         -1.560e+02  6.035e+01  -2.585   0.0415 *
## educ        -2.685e+02  2.848e+02  -0.943   0.3821  
## asset       -1.537e-02  1.165e-02  -1.320   0.2351  
## puren        1.887e+01  9.747e+00   1.936   0.1010  
## purep        3.355e+01  2.434e+01   1.378   0.2173  
## purek       -3.641e+01  2.127e+01  -1.712   0.1378  
## npest        8.329e+02  8.638e+02   0.964   0.3721  
## nirri       -1.337e+02  4.179e+02  -0.320   0.7598  
## Hunan        7.096e+01  2.314e+03   0.031   0.9765  
## Sichuan     -6.990e+03  1.945e+03  -3.594   0.0114 *
## Jiangxi     -3.592e+03  4.127e+03  -0.871   0.4175  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2181 on 6 degrees of freedom
## Multiple R-squared:  0.8629, Adjusted R-squared:  0.566 
## F-statistic: 2.906 on 13 and 6 DF,  p-value: 0.09901
par(mfrow=c(2,2))
plot(lm_dat)

6.完成后save :cd/../datacean/data/cln/finaldata.dta,replace (2分)