*代码块
clear //删除当前内存中的数据集
cd F:\stata相关\stata学习笔记 //指定路径
log using filename
sysuse auto.dta
describe
summarize,sep(3)
*help search hsearch
*serch用关键词来进行检索,从官方的帮助文件FAQS、例子SJ和STB中获得信息
search ols
*findit 较广泛的关键词搜索命令,不仅仅局限于关键词
findit weak instr
*hsearch提供更详细的搜索,不局限于关键词。
*但是需要使用全词进行搜索,搜到的信息更多
hsearch weak instrument
*认识stata命令
*[]表示可以进行选择的限定符,
*打印体的单词需要输入到stata中(注意单词拼写),
*斜体的单词可以被用户替代
*例:[prefix:]command[varlist][=exp][if][in][weight]
*[using filename][option]
*summarize命令
summarize
sum //可以使用缩写
summarize mpg price weight,separator(1) //sep表在输出结果中每几行画一条线
*regress命令
help regress
* regress depvar [indepvars] [if] [in] [weight] [, options]
regress mpg //只包含被解释变量,即只对截距项进行回归
reg mpg price weight
*weight的系数-0.0058175表示当汽车的重量每增加1000磅时,经济油耗
*每加仑英里下降了5.8
*限定到foreign变量中的每个值(共22个)进行回归,且汽车重量小于
*4000磅,使用vce(robust)可以得到异方差-稳健标准误
by foreign:reg mpg price weight if weight<4000,vce(robust)
*使用quietly前缀可以压缩无关的输出结果
quietly reg mpg price weight
*因子变量
tab rep78 //发现rep78有五个不同的值,即它是一个分类变量
sum rep78
sum i.rep78 //注意区分本行和上一行的区别
sum ib2.rep78 //省略第二个类别
sum ibn.rep78
sum ib(last).rep78
sum rep78,allbaselevels //包含所有类别,同sum rep78
*使用#算子可以创建两个(或更多)分类变量之间的一组完整的交互项
sum i.rep78#i.foreign,allbaselevels
*用##创建因子交互项
sum i.rep78##i.foreign
sum i.rep78 i.foreign i.rep78#i.foreign //与上一行等价
sum i.rep78#c.weight //weight是连续变量,前面用C.
*因子变量与连续变量的交互回归
reg mpg price c.weight c.weight#c.weight,noheader //noheader,只显示回归结果
reg mpg price c.weight##c.weight,noheader
reg mpg c.price##c.weight,noheader
*缩写词、大小写的敏感性和通配符
*stata中变量名最长可以达到32个字符
*stata 区分大小写
*通配符 "*" 星号
sum t*
*算术、关系和逻辑算子
display -2*(9/(8+2-7))^2
dis 2/10
* >大于 <小于 ==等于 !=不等于 >=大于等于 <=小于等于 ~=不等于
* |或、 & 且、 !非
reg mpg price weight if weight <= 4000 & price <=10000
*报错后可以直接点报错编码查看原因,也可以在交互模式下输入
search rc111 (111指报错编号)
*查看当前路径、指定路径
pwd //查看
cd C:\Users\DELL\Documents //指定
*log日志--保存所有运行命令及其输出结果(stata运行过程的再现)
*开始,在运行代码前就要启动log
//log using filename (注意存放位置)
//文件-日志-开始-选择日志文件类型 (smcl是stata格式的日志文件,可读性强)
*结束
//log close
*stata do文件的注释
* 以*开始的这一行stata不会去运行
// 一般用来放在命令之后进行说明(在同一行较好)
/* 用于多行注释,增强可读性,
就是将需要注释的内容放到/**/之间*/
* 换行 用/// 一般用在命令比较长的时候,///可以跨行执行
* 查看stata当前系统设置的细节
query
creturn list
*set matsize 300 //改变变量个数最大值
* 标量-存储单个数字或者单个字符串
scalar a=2*3
scalar b="2 times 3 = "
display b a
*矩阵
matrix define A=(1,2,3\4,5,6\7,8,9) //3*3的矩阵
matrix list A
scalar c1=A[3,3] //矩阵中特定元素的提取,第三行第三列
scalar c2=A[2,2]
display c1
display c2
*使用来自stata命令之后所获得的结果--r类
//分析数据但不估计参数的是r类命令,所有r类命令都保存在r()中
summarize mpg
return list //r(sum_w)表示权重之和
quietly sum mpg
scalar range = r(max)-r(min)
display "Sample range = " range
scalar mpgmean=r(mean) //将变量的均值储存为一个标量进行使用
dis mpgmean
*使用从e类命令regress所得的结果
//估计类命令都是e类命令,如regress命令。其结果都储存在e中,输入ereturn list可以查看
regress mpg weight price
ereturn list
//e(mss) = 1595.932492798133 模型平方和,e(rss) = 847.5269666613266残差平方和
//R2=e(mss)/(e(mss)+e(rss))
scalar r2=e(mss)/(e(mss)+e(rss))
display "R square = " r2
matrix best=e(b)
scalar bprice = best[1,1]
dis bprice
matrix Vest = e(V)
scalar Vprice = Vest[1,1]
dis Vprice
scalar tprice = bprice/sqrt(Vprice)
dis sqrt(Vprice)
display "t statistics for H0 : b_price = 0 is " tprice
*宏 -- 全局宏、局部宏
/*用一串字符串来代表另一串字符串 比如可以用Xlist来代替 price weight等自变量,
用global代表全局宏,可以在整个do文件中进行使用;local代表局部宏,可以在指定
段落进行使用。*/
global xlist price weight
reg mpg $xlist ,noheader
reg mpg $xlist
reg mpg $xlist ,vce(r)
*local
local x " price weight "
reg mpg `x' //与上一行一起执行
local a " 2+2 "
dis `a'
*循环命令
//foreach、forvalue、 while
/* foreach 命令在一个列表中的不同项之间构造循环,列表可以是一个变量名称,
也可以是数字列表;forvalue命令在数字的连续值之间构造循环;while循环持续到
用户指定的一个条件不能被满足为止。*/
*generate -- 生成一个新的变量
*runiform() --从均匀分布中进行抽样
*set seed -- 生成随机数后将种子设置成特定的值
clear
set obs 100
set seed 10101
gen x1var = runiform()
gen x2var = runiform()
gen x3var = runiform()
gen x4var = runiform()
gen sum = x1var + x2var +x3var +x4var
sum sum
//将以上步骤用循环来实现
*foreach -- 一个列表中的不同项目之间循环构建
drop sum
gen sum=.
replace sum=0
foreach var of varlist x1var x2var x3var x4var{
quietly replace sum=sum+`var'
}
sum sum
*forvalue--可以在连续的值之间进行循环迭代
drop sum
gen sum=.
quietly replace sum = 0
forvalue i=1/4{
quietly replace sum = sum + x`i'var
} //i=1/4 增量是1,forvalue 1=1(2)11 的增量为2.
sum sum
*合并前两个步骤
clear
set obs 100
set seed 10101
forvalue i=1/4 {
gen x`i'var=runiform()
}
gen sum = 0
foreach var of varlist x1var x2var x3var x4var{
quietly replace sum=sum+`var'
}
sum sum
* while - 持续到某一条件不能被满足时
quietly replace sum = 0
local i 1
while `i'<=4{
quietly replace sum =sum+x`i'var
local i = `i'+1
}
sum sum
*循环的练习1
clear
forvalues x = 1/4{
if mod(`x',2){
dis "`x' is odd"
}
else {
dis "`x' is even "
}
}
//mod 计算被整除后的余数
clear
scalar x=mod(10,2)
dis x
scalar x=mod(22,7)
dis x
*使用continue完成练习1
forvalues i=1(1)10{
if mod(`i',2){
dis "`i' is odd"
continue
else{
dis "`x' is even"
}
}
}
网友评论