资源描述
第六讲stata程序编写与管理,第一种方法:直接写dofile,打开do编辑器:doedit一个简单的dofiledisplay“hello,world”exit/告诉stata在这程序结束,exit可不写保存为hello.do在command窗口输入dohellostata会显示display“hello,world”hello,world,第二种:在stata窗口中输入,stata显示:programhello1.display”hello,world“2.end执行:hello显示:hello,world将hello,world修改为hello,cufeprogramhellohelloalreadydefinedr(110)解决方法:programdrophello注意,program名不能与stata中的命令名一致programdesdisplay”hello,world“end,第二种:在stata窗口中输入,programhellodisplayhello,cufeend查找语法错误:settraceon关闭该功能:settraceoff,第三种:dofile中的program,programhellodisplay“hello,world”endstata中输入:dohellostata显示:helloalreadydefinedr(110)stata输入:programdrophellodohello/或用runhellohello,第四种:dofile的扩展,programhellodis“hello,world”endhelloexit如果加上programdrophello解决方法:capture,第五种:adofile,adofile是stata中的可执行文件programhellodis“hello,world”endexit执行时输入:programdrophellohellostata显示:hello,world,adofile的保存地址,adofile只有放在指定的文件夹中才能运行adopath命令adopath+c:adopersonal/增加新的adofile存放地址adopath-c:adopersonal/移除adofile目录注意:可以将自己的程序统一存放于D:stataadopersonalmyado同时在profile.do文件中做如下定义adopath+D:stataadopersonalmyado该文件夹下可以进一步设定a-z的子文件夹,一个完整的dofile文件,capturelogclose/检查log的状态为closelogusingx,replace/打开logxsetmoreoffcaptureprogramdrophelloprogramhellodis“hello,world”endlogclose/关闭logexit/保存为sj.do,dofile的引用,dosjexit/保存为sj2.dodosj2,assert的用法,assert是stata的重要命令,如果assert后的表达式为true,则stata继续执行命令,否则stata会提示出错captureprogramdropsj2sysuseauto,clearassertforeign2exit/保存为sj2.do,preserve的用法,preserve可以避免数据在程序执行后有所变动sysuseauto,clearpreserve/备份当前状态S1dropifprice10000sumsavenauto,replacerestore/恢复到状态S1sumusenauto,clear,quietly的用法,quietly可以避免列印过多的结果比较两段代码captureprogramdropsjprogramsjsysuseauto,cleardropifprice1000savenauto,replaceendcaptureprogramdropsjprogramsjsysuseauto,clearquietlydropifprice1000savenauto,replaceend,单值Scalar,存放数值scalara=3scalarb=ln(a)+5disadisb存放字符串scalarc=.adiscscalars1=“hello,world”scalars2=substr(s1,1,5)diss1diss2,执行命令后的单值结果,sysuseauto,clearsumpricereturnlistdisr(N)scalarrange=r(max)-r(min)disrangegenqq=r(sd)listqqin1/10,单值管理,scalardirscalarlist/显示单值的内容scalardropa/删除单值scalarlistscalardropall/删除所有单值scalarlist,暂元变量localmacro,local:在一个do或adofile中发挥作用暂元的定义与引用存放数字locala=5disalocalb=a+7disb存放文字localname1“sj:”dis“name1”localname2“中央财经大学会计学院”dis“name2”localname3name1name2dis“name3”存放变量名称sysuseauto,clearlocalvarllistpriceweightsumvarlist,Local:数学运算符的处理,locala“2+2”disadis“a”/看这两个有何区别localb=2+2/注意与a的定义的区别disbdis“b”,暂元中的暂元,locala1=2locala2“var”locala3=2*a1locala4aa1locala2a1=2*a3disa1dis“a2”disa3dis“a4”,全局暂元globalmacro:定义与引用方式,全局暂元:在整个stata运行的过程中一直存在定义与引用方式:globalaa“Thisismyfirstprogram!”dis“$aa”globalx1=5globalx2=2$x1dis$x2示例:sysuesauto,clearglobaloption“,robust”globalreg“regress”localx1“pricempgforeign”$regrep78x1$optionlocalx2“pricempgforeigntrunk”$regrep78x1$option$regrep78x2$option,暂元的管理,macrolistmacrodirmacrodropx2macrodirx2macrodiraa,暂时性变量tempvar,sysuseauto,cleartempvarx1x2genx1=price*2genx2=ln(rep78)sumx1x2暂时性变量可以与永久变量同名,循环语句,while语句forvalues语句foreach语句,条件循环语句:while,localj=0whilej5disajlocalj=j+1,循环语句:forvalues,locali=1localj=_Nforvaluesi=1(1)jdisaIforvaluesi=0(-1)-14disai,forvalues应用示例,假设你有100个文件,分别为d1.dta,d2.dta,d100.dta研究要求将这100个文件做纵向合并,写出程序used1.dta,clearlocali=2forvaluesi=2(1)100appendusingdi.dtasavefinaldata,replace,循环语句:foreach,foreachvarofvarlistxyzcommand示例1:将auto.dta各变量的对数转换和缩尾处理sysuseauto,clearlocalvarspriceweightlengthforeachvofvarlistvarsgenlnv=ln(v)winsorv,gen(vw)p(0.01),条件语句:if,语法格式格式1if(条件)command格式2if(条件1)command1elseif(条件2)/这里可以没有ifcommand2,条件语句:if示例,scalaraa=1ifaa=1dis“这小子真帅!”elseifaa=0dis“这女孩真亮!”,引用stata命令的返回值,留存在内存中的结果r-class,与模型估计无关的命令,如sume-class,与模型估计有关的命令,如regresss-class,其他命令,如listc-class,存储系统参数显示留存值的方法r-class:returnliste-class:ereturnlists-class:sreturnlistc-class:creturnlist留存值分为四种类型:单值:如r(mean),r(max),r(N),e(r2),e(F)矩阵:如e(b),e(V)暂元:如e(cmd),e(depvar)函变量:如e(sample),
展开阅读全文