当前位置:   article > 正文

Stata学习笔记_stata if else

stata if else
命令解释示例备注
pwd显示当前路径pwd 
dir显示当前路径下所有文件dir 
mkdir当前路径下新建文件夹mkdir d:/mydata 
cd更改路径为cd d:/mydata 
append纵向合并 ,个案拼接append using math 
merge横向合并,变量合并merge using 
xpose转置xpose,clear 
cap悄悄运行,但无论正误继续do命令cap与quiet 区别
qui悄悄运行,遇错停止qui 
duplicate重复值

duplicate report 报告重复值

duplicate list 将重复值列表呈现

duplicate drop 删除重复值

 
byssort by简写,字符型变量分组  
sort升序  
gsort降序  
gen生成新变量,无函数gen newvar=var/10 
egen生成新变量,有函数egen newvar=mean(var) 
xtile    ,nq(n)n等分分组  
record重新赋值 简洁
  1. *使用日志文件
  2. log using c:\logfile //设置为smcl格式
  3. log using c:\logfile.log,text //设置为文本格式
  4. log using c:\logfile.log,text replace //覆盖日志文件
  5. log using c:\logfile.log,text append //添加到原有文件之后
  6. log off //暂时关闭
  7. log on //重新打开,对应的是log off
  8. log close //完全关闭,对应log using
  9. *其他常用第三方命令,首次使用需运行"ssc install 程序名"下载安装
  10. *回归结果导出
  11. outreg2 被解释变量 解释变量1 解释变量2 using regfile,replace seeout
  12. *日志文件导出,以计算pearson相关系数为例
  13. logout,save(my) excel replace:pwcorr lwt bwt,sig star(0.05)
  14. *最小二乘回归表导出
  15. esttab using test.rtf
  16. cd //查看当前工作目录
  17. cd "d:/CHFS_tracking" //设置当前工作目录
  18. by foreign : count if rep78 > 4
  19. describe
  20. codebook foreign
  21. list foreign price mpg rep78 in 1/5
  22. browse foreign price mpg rep78 in 1/5
  23. generate epi001=1 if foreign==1
  24. replace epi001=0 if foreign==0
  25. ttest price,by(foreign) //成组t检验
  26. logit foreign rep78 price
  27. *----------------------------------------*
  28. *========= 描述变量 ==========*
  29. *----------------------------------------*
  30. sysuse auto,clear
  31. tabstat price,by(foreign) stat(mean sd min max) //分层描述
  32. *summarize语句:描述连续性变量
  33. sysuse auto //使用软件自带的数据auto
  34. summarize price
  35. summarize mpg //
  36. summarize mpg,detail //显示其他更多信息
  37. summarize,separator (8) //显示所有变量的信息,且每八个变量分割一下
  38. *tabulate语句:描述分类变量
  39. tabulate foreign
  40. tab1 rep78 foreign //对多个变量逐个描述
  41. tabulate rep78 foreign //rep78和foreign的交叉表
  42. tab2 rep78 foreign //为指定变量列表中的变量生成任意可能组合的交叉表
  43. *----------------------------------------*
  44. *========= 循环语句 ==========*
  45. *----------------------------------------*
  46. *----------forvalues循环语句
  47. *带条件语句(if else)的循环语句
  48. forvalues x=1/9{
  49. if mod(`x',2){
  50. display "`x' is odd"
  51. }
  52. else{
  53. display "`x' is even"
  54. }
  55. }
  56. *带条件语句(if continue)的循环语句
  57. forvalues x=1/9{
  58. if mod(`x',2){
  59. display "`x' is odd"
  60. continue
  61. }
  62. display "`x' is even"
  63. }
  64. *提前终止(if continue break)循环的循环语句
  65. forvalues x=1/9{
  66. if mod(`x',2)==0{
  67. display "The first odd is `x'"
  68. continue,break
  69. }
  70. }
  71. *-----foreach循环语句in/of都可,但of效率更高,推荐使用
  72. *循环变量list为字符变量(变量名也可以简写,只写前几个字母,t*表示t开头的变量)
  73. foreach var of varlist pri-rep t*{
  74. quietly summarize `var'
  75. summarize `var' if `var' > r(mean)
  76. }
  77. *循环新变量(list为新建字符变量)
  78. foreach var of newlist z1-z4{
  79. generate `var' = runiform()
  80. }
  81. *循环数字,list为数值
  82. foreach num of numlist 1/4 8 103{
  83. display `num'
  84. }
  85. *注:foreach上述三种方法不够稳健,推荐使用下面的宏的方法
  86. *foreach of local macro,list为局部宏
  87. local grains "rice wheat flax"
  88. foreach x of local grains{
  89. display "`x'"
  90. }
  91. *foreach of global macro,list为全局宏
  92. global money "dollar lira pound"
  93. foreach y of global money {
  94. display "`y'"
  95. }
  96. *-------while循环语句------------*
  97. *continue,break可使命令跳出整个循环
  98. local i = 1
  99. while `i' < 4{
  100. if mod(`i',2)==0{
  101. display "The first odd is `i'"
  102. continue,break
  103. }
  104. display "The i is `i'"
  105. local i = `i' + 1
  106. }
  107. *exit命令可以退出当前程序或do命令
  108. local i = 1
  109. while `i' < 4{
  110. if mod(`i',2)==0{
  111. display "The first odd is `i'"
  112. exit
  113. }
  114. display "The i is `i'"
  115. local i = `i' + 1
  116. }
  117. *有多个嵌套循环,只想跳出当前循环,可以使用if break组合
  118. local i = 1
  119. while `i' < 4{
  120. if mod(`i',2)==0{
  121. display "The first odd is `i'"
  122. break
  123. }
  124. display "The i is `i'"
  125. local i = `i' + 1
  126. }
  127. *若while循环是递增或递减的,还可以使用以下方法:
  128. local i = 0
  129. while (`i++') < 4{
  130. if mod(`i',2) == 0{
  131. display "The first odd is `i'"
  132. continue,break
  133. }
  134. display "The i is `i'"
  135. }
  136. *----------------------------------------*
  137. *========= 报表制作 ==========*
  138. *----------------------------------------*
  139. *-------------tabulate命令---------------*
  140. *tabulate命令:生成二维频数表,一般简写为tab
  141. *选项:column——每列相对频数;row——每行相对频数;cell——每个单元格相对频数
  142. *expected——每个单元格期望频数;nofreq——不输出频数;nolabel——输出数值而不是数值标签
  143. webuse citytemp2
  144. tabulate region agecat,row column expected chi2
  145. *------------- table命令------------------*
  146. *table命令:生成概要统计表格
  147. *注意:contents(clist)用于定义表格输出的统计量,最多可选5个统计量,且统计量后边需要跟上变量名,即c(mean varname)
  148. *绘制一维表
  149. webuse auto2
  150. table rep78,c(n mpg mean mpg sd mpg med mpg) format(%9.2f) //按照rep78变量取值分组汇总mpg的频数、均值、标准差和中位数,且有小数的保留两位小数
  151. *绘制二维表,表格内容居中对齐,增加行合计和列合计
  152. table rep78 foreign,c(mean mpg) format(%9.2f) center row col
  153. *绘制三维表
  154. *sc——scolumn可以增加超级列合并,比如下面例子不仅按照race分为了other和white两大列,还会新形成一个total列
  155. *fw为赋权
  156. webuse byssin
  157. table workplace smokes race [fw=pop],c(mean prob) format(%9.3f) sc col row
  158. *绘制更高维度的表格——通过by()选项实现
  159. webuse byssin1
  160. table workplace smokes race [fw=pop],by(sex) c(mean prob)format (%9.3f) sc col row
  161. *-------------tabstat命令--------------------*
  162. *tabstat命令:生成精简统计表格
  163. *statistics(statname)用于定义表格输出的统计量
  164. webuse auto
  165. tabstat price weight mpg rep78 ,by(foreign) stat(mean sd min max) long format
  166. *----------------------------------------------*
  167. *==== 在数据集中生成包含统计信息的变量 =====*
  168. *---------------------------------------------*
  169. *-------------collapse命令--------------------*
  170. *包含概要统计的数据集:collapse命令
  171. *collapse命令用法:
  172. collapse (stat) varlist
  173. collapse (stat) target_var=varname
  174. *stat选项是用来指定输出的变量的
  175. webuse college,clear
  176. list
  177. collapse (mean) gpa hour (median) medgpa=gpa medhour=hour [fw=number],by(year)
  178. list
  179. *注意:此时的gpa和hour变量都是原gpa和hour的均值
  180. *-------------contract命令--------------------*
  181. *生成包含频数和百分数的数据集:contract命令
  182. *把原始数据整理成频数形式
  183. webuse auto2,clear
  184. list rep78 foreign
  185. contract rep78 foreign
  186. list
  187. expand _freq //转换成原始数据格式
  188. *-------------statsby命令--------------------*
  189. *按分类生成统计量:statsby
  190. webuse auto2,clear
  191. statsby,by(foreign):regress mpg gear turn
  192. list
  193. *只看gear变量对应的系数
  194. webuse auto2,clear
  195. statsby gear=_b[gear],by(foreign):regress mpg gear turn
  196. list
  197. *----------------------------------------------*
  198. *==== 将回归表格导出到excel =====*
  199. *---------------------------------------------*
  200. *命令1:比较全,可以把F统计量等信息也导出
  201. sysuse auto,clear
  202. regress price turn gear
  203. putexcel set "C:\results.xlsx",sheet("regress results")
  204. putexcel F1 = ("Number of obs") G1 = (e(N))
  205. putexcel F2 = ("F") G2 = (e(F))
  206. putexcel F3 = ("Prob > F") G3 = (Ftail(e(df_m),e(df_r),e(F)))
  207. putexcel F4 = ("R-squared") G4 = (e(r2))
  208. putexcel F5 = ("Adj R-squared") G5 = (e(r2_a))
  209. putexcel F6 = ("Root MSE") G6 = (e(rmse))
  210. matrix a = r(table)'
  211. matrix a = a[.,1..6] //指定输出的列数,现在只指定了输出回归表格前六列的内容
  212. putexcel A8=matrix(a,names)
  213. *命令2:只导出了回归结果,比较简单,适合只需要回归系数的情况
  214. putexcel B3 = matrix(r(table)',names) using "C:\results1.xlsx"
  215. *----------------------------------------------*
  216. *==== reshape命令 =====*
  217. *---------------------------------------------*
  218. webuse reshape3,clear
  219. reshape long inc@r ue,i(id) j(year)
  220. *----------------------------------------------*
  221. *==== 对变量进行编码 =====*
  222. *---------------------------------------------*
  223. *recode x2 (1 2 = 1)(3 = 2)(4/9 = 3) //会替代原始数据
  224. recode x2 (1 2 = 1)(3 = 2)(4/9 = 3),prefix(rec) //将编码后的数据放入新变量且新变量为原始变量名加前缀rec
  225. recode x2 (1 2 = 1)(3 = 2)(4/9 = 3)(nonmissing = 9),prefix(rec) //重新编码时其他非缺失值可以用nonmissing选项
  226. recode x2 (1 2 = 1 Below)(3 = 2 Average)(4/9 = 3 Above),prefix(rec2) label(reclab) //给新变量设置变量值标签
  227. recode x2 (1 2 = 1)(3 = 2)(4/9 = 3)(10/max),prefix(rec3)
  228. encode gender,gen(sex) //将字符变量编码为数值变量,比如将female编码为0,male编码为1
  229. decode sex,gen(gender1) //将数值变量编码为字符变量
  230. *----------------------------------------------*
  231. *==== 对缺失值进行编码 =====*
  232. *---------------------------------------------*
  233. *默认系统缺失值为","
  234. *变量值标签不会随编码自动改变,必要时需手动加以调整
  235. *将数值编码为缺失值的命令:mvdecode
  236. mvdecode rep78 ,mv(998=.\999=.a) //当rep78=998时将其编码为系统缺失值".",rep78=999时编码为扩展缺失值".a"
  237. mvdecode _all,mv(998=.\999=.a) //所有变量都按此规则编码
  238. *将缺失值编码为数值的命令:mvencode
  239. mvencode rep78 if foreign == 0,mv(998) //foreign=0时将rep78的缺失值编码为998
  240. mvencode rep78 if foreign == 1,mv(999) //foreign=1时将rep78的缺失值编码为999
  241. mvencode _all,mv(.=999\.a=998\.b=997\else=996)
  242. *----------------------------------------------*
  243. *==== 数值变量和字符变量的转换 =====*
  244. *---------------------------------------------*
  245. *字符变量转换为数值变量:destring和real()
  246. destring foreign , gen(foreignd)
  247. gen foreignd = real(foreign) //另一种方法
  248. destring foreign,replace
  249. destring foreign,replace force
  250. destring foreign,gen(foreignd) ignore(x) //变量中除了数值,还有x值,可选择忽略x值(设为缺失值)
  251. destring foreign,gen(foreignd) ingore(" ") //忽略空格
  252. destring trunk weight length turn,gen(trunkd weightd lengthd turnd) ignore("$,%") percent //同时忽略多个字符,百分数用小数表示
  253. *----------------------------------------------*
  254. *==== 数据集的纵向追加 =====*
  255. *---------------------------------------------*
  256. sysuse auto,clear
  257. keep if foreign == 0
  258. keep make price mpg rep78 headroom foreign
  259. save domestic
  260. sysuse auto,clear
  261. keep if foreign == 1
  262. save foreign
  263. use domestic,clear
  264. append using foreign,gen(_append) //_append为0表示来自主数据集,为1表示来自using的第一个数据集
  265. append using foreign,gen(_append) keep(make price mpg rep78 headroom foreign) //只选择某些变量追加到主数据集
  266. *----------------------------------------------*
  267. *==== 数据集的横向合并 =====*
  268. *---------------------------------------------*
  269. *1:1
  270. webuse autosize
  271. merge 1:1 make using http://www.stata-press.com/data/r13/autoexpense
  272. merge 1:1 make using http://www.stata-press.com/data/r13/autoexpense,keep(match) //仅保留完全匹配的记录
  273. *1:m
  274. webuse overlap2,clear
  275. merge 1:m id using http://www.stata-press.com/data/r13/overlap1 //如果主数据和using数据有重复变量,保留主数据的变量值
  276. merge 1:m id using http://www.stata-press.com/data/r13/overlap1,update
  277. merge 1:m id using http://www.stata-press.com/data/r13/overlap1,update replace
  278. *m:1
  279. webuse overlap1,clear
  280. merge m:1 id using http://www.stata-press.com/data/r13/overlap2
  281. merge m:1 id using http://www.stata-press.com/data/r13/overlap2,update
  282. merge m:1 id using http://www.stata-press.com/data/r13/overlap2,update replace
  283. *1:1序贯合并:没有关键变量,按记录号合并
  284. webuse sforce,clear
  285. merge 1:1 _n using http://www.stata-press.com/data/r13/dollars
  286. *注:1:m和m:1合并时,数据库间存在同名变量时:
  287. *默认以主数据中同名变量的变量值作为合并后的变量值
  288. *用update选项时:匹配的缺失值用using数据集的数据代替
  289. *用update replace选项时:匹配记录的值用using数据集的数据代替
  290. *在横向合并前使用cf命令查看主数据和从数据的变量的差别,具体可以help(cf)
  291. cf _all using http://www.stata-press.com/data/r13/autoexpense,all
  292. isid id //用来判断id的值是否唯一
  293. *----------------------------------------------*
  294. *==== 数据集的交叉合并:组内交叉 =====*
  295. *---------------------------------------------*
  296. *joinby命令:实现了m:m,具体help joinby
  297. use "D:\黄静\child.dta",clear
  298. describe
  299. list
  300. webuse parent,clear
  301. save "D:\黄静\parent.dta"
  302. use "D:\黄静\parent.dta",clear
  303. describe
  304. list
  305. sort family_id
  306. joinby family_id using child //只保留匹配上的记录
  307. joinby family_id using child,unmatched(both) //保留主数据和从数据的所有记录
  308. joinby family_id using child,unmatched(master) //保留主数据记录
  309. joinby family_id using child,unmatched(using) //保留从数据记录
  310. describe
  311. list

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/534638
推荐阅读
  

闽ICP备14008679号