您好,欢迎访问三七文档
Stata的循环Dr.ChuntaoLi中南财经XX大学局部宏localmacros•LocalMacros–有一个局部宏名称–宏的内容可以是任何东西•定义方式:–locallname“contents”或locallname=expression–localone“1”–localone1–localone=1–localone=2–disp`one’局部宏•局部宏的内容可以通过如下的格式调用:–`local_macro_name’–disp`one’–localtwo=`one’+1•局部宏的内容只能在程序里面调用和修改•当程序结束的时候,局部宏也就不存在了局部宏•局部宏定义方式可以是如下的格式:–localmylocal[option]–[]中表示局部宏后面所接的内容,可以是:•表达式•扩展的函数•字符串•`字符串'。•local定义的局部宏有双引号的格式,同时还有单引号和双引号一起使用的复合引号`',这种情况使用在字符串(string)中含有双引号的情况。局部宏–localmylocal=表达式–localmylocal:扩展的函数–localmylocal字符串–localmylocal`字符串'局部宏•clear•setobs10•localamycity•gen`a'=wuhan•相当于genmycity=wuhan,局部宏•clear•setobs10•localamycity•locali=1•gen`a'`i'=wuhan•相当于genmycity1=wuhan,局部宏•clear•setobs10•localb1mycity•localab•locali=1•gen``a'`i''=wuhan•相当于genmycity=wuhan。局部宏•localproblem3+3•disp`problem'•6•disp`problem'•problem•disp``problem''•3+3•localproblem3+3•disp`problem'•6•disp`problem'•problem•disp``problem''•6局部宏:扩展函数•locallbl:variablelabelmyvar–myvar局部宏的标签值存储在名为lbl的局部宏中局部宏:扩展函数•sysuseauto,clear•foreachvariableinmakepricempg///•rep78headroomtrunkweightlength///•turndisplacementgear_ratioforeign{•locallbl:variablelabel`variable'•dispthelabelof`variable'is`lbl'•}局部宏:扩展函数•locallbl:wordiof“string”–将“string”的第i个单词存储在局部宏lbl中–localmystring=thisisjustatest–forvaluei=1(1)5{–locallbl:word`i'of`mystring'–disp`lbl'–}–this–is–just–a–test局部宏:扩展函数•localfilelist:dir.files*.CSV,respectcase–将dir的结果存储到localfilelist中–localfilelist:dird:/春涛教程/wind2007files*.do,respectcase–disp``filelist''–cdd:/春涛教程/–localfilelist:dir.files*.docx,respectcase–disp``filelist''局部宏:扩展函数•cdd:/春涛教程/•localfilelist:dir.files*.docx,respectcase•disp``filelist''•Chapter1数据读入.docxStata大纲.docx培训大纲.docx宏与标量.docx局部宏•比如,程序macro1的内容如下:–localone1–disp`one'–localtwo=`one'+1–disp`two'•执行程序macro1以后,通过命令行输入disp`two’,屏幕不能给出任何结果宏运算•clear•locala=1•locala=`a'+1•disp`a'•local++a•disp`a'•locala=`a'-1•disp`a'•local--a•disp`a'•disp`b'•local++b/*此处报错*/•disp`c'•localc=`c'+1•disp`c'全局宏globalmacros•与局部宏类似,也有一个宏名称•宏的内容也可以是任何东西•区别:–一旦在程序中定义了,即使程序结束了,全局宏依然存在–通过$调用•globalone1•di$one全局宏•比如,程序global1的内容如下:–globalone1–disp$one–globaltwo=$one+1–disp$two•执行程序global1以后,通过命令行输入disp$two,屏幕仍然能给出结果全局宏•clear•setobs10•globalamycity•gen$a=wuhan•相当于genmycity=wuhan全局宏•clear•setobs10•globalamycity•globali=1•gen$a$i=wuhan•相当于genmycity1=wuhan全局宏•clear•setobs10•globalb1mycity•globali=1•gen${b$i}=wuhan•相当于genmycity=wuhan“•{b$i}相当于b1•可以通过{}对全局宏进行整体引用。全局宏•clear•setobs10•globalb1mycity•globalab•globali=1•gen${$a$i}=wuhan•相当于genmycity=wuhan“•{$a$i}相当于b1。扩展的函数•global全局宏名:扩展的函数•globala:display%9.4fsqrt(2)•disp$a•运行结果为:•1.4142•globala:display%dCY_N_Ddate(c(current_date),DMY)•disp$a•20140806全局宏•将字符串付给一个全局宏?•globalmystrthisisateststring•disp$mystr•如果字符串中本身有双引号呢?局部宏•利用程序结束后局部宏丢失的特点,可以用局部宏为do文件中的临时文件、临时变量命名,do文件一旦结束,这些临时变量和临时文件会自动被删除•定义临时变量–tempvartempvarname–调用方式:`tempvarname’•定义临时文件–tempfiletempfilename–调用方式:`tempfilename’while循环•while循环,虽然简单,但是超级有用,可以简化繁琐的重复劳动•语法如下:–whileexpression{–statacommands–...–}•while首先评价expression的真假,如果expression取值为真,则执行大括号内的命令•执行完一轮后再回到whileexpression,重新执行以上的过程•直到expression取值为假•以上的while循环可以嵌套在别的循环里面While循环•单循环–locali=1–while`i'10{–disp`i‘–locali=`i'+1–}While循环•嵌套循环–matA=J(5,5,.)–locali=1–while`i'=5{–localj=1–while`j'=`i'{–matA[`i',`j']=`i'*`j'–localj=`j'+1–}–locali=`i'+1–}––matlistAForeach&Forvalues•foreach和forvalues都可以看作是while循环的变种•foreach循环的对象可以是局部或全局宏,或者一系列的变量名或文件名等•forvalues循环的对象是一列数字foreach循环•对每一个变量进行循环:–clear–setobs100–genx1=rnormal()–genx2=rnormal()–genx3=rnormal()–genx4=rnormal()–genx5=rnormal()–foreachvarinx1x2x3x4x5{–disp–disp–dispT-Test:themeanofvariable`var'is0–ttest`var'=0–}Forval循环•clear•setobs100•genx1=rnormal()•genx2=rnormal()•genx3=rnormal()•genx4=rnormal()•genx5=rnormal()•forvali=1(1)5{•disp•disp•dispT-Test:themeanofvariablex`i'is0•ttestx`i'=0•}Forvalue循环•clear•setmoreoff•forvalui=1(1)5{•disp`i'/*显示i的值,下面实现i的值的递增*/•local++i•disp`i'•}NBERWorkingPapers•DownloadrecentNBERWorkingpapers–––cdd:/春涛教程/循环/–capturemkdird:/春涛教程/循环/NBER/–forvali=19990(1)19999{–copy`i'.pdfd:/春涛教程/循环/NBER/w`i'.PDF,replace–}continue•有时候,做一个循环,但遇到某种情况需要终止–中止余下的命令,返回到循环顶端进行下一轮循–continue–中止全部循环–continue,breakcontinue•clear•forvaluei=1(1)10{•disp`i'`i'*`i'•if`i'5{•continue•}•disp`i':执行这一行命令吗?•}continue•clear•forvaluei=1(1)10{•disp`i'`i'*`i'•if`i'5{•continue,break•}•disp`i':执行这一行命令吗?•}continue•forvaluesx=1/4{•ifmod(`x',2){•display`x'isodd•}•else{•display`x'iseven•}•}continue•forvaluesx=1/4{•ifmod(`x',2){•display`x'isodd•continue•}•display`x'iseven•}continue•forvaluesi=1/10{•clear•setobs100•genx=uniform()*100•geny=3+.8*x+rnormal(0,5)•dropifuniform().6•if_N38{•disp`i':insufficientObs.•continue•}•regyx•}continue•setmoreoff•forvaluedate=1(1)210{•localreptdate:disp%dCY-N-Dmdy(1,1,2013)+`date'•disp`reptdate'•capturecopy`reptdate'/600900_2012_n.pdfd:/春涛教程/年报/2012/600900.pdf,replace•if_rc==0{•continue,break•}•}downloading上海上市公司年报•见“年报”子目录内容交易数据的处理•见wind2007子目录内容
本文标题:Stata的循环
链接地址:https://www.777doc.com/doc-4312995 .html