Advertisement

Stata基础33讲(连享会公开课)

阅读量:

A. 课程概述

Stata = statistics + data(统计分析+数据处理)

为何选择Stata?

  1. Stata数据处理功能强大、快捷,提供了大量的函数;
  2. Do-files 非常便利,帮助一次性执行多条命令,使实证分析工作具有可重复性;
  3. 绘图精美;
  4. 更新快、平台宽,保证研究工作与时俱进。

LY_Stata文件夹放置了本课程所有资料(放置路径)

  1. data——范例数据
  2. plus——使用到的所有外部命令
  3. Refs——使用到的所有参考文献
  4. Results——统计和回归分析的结果

B. Stata 简介(Basic)

B1 Stata概览

【ado】

base文件夹——官方命令背后对应的ado文件和说明文件

updates文件夹——定期更新后的辅助文件存放

plus文件夹——Stata插件

personal文件夹——自行建立,存放个人文件,建立专题,学会整理

【菜单栏】的使用

【文件】-【导入】把不同格式数据转换成Stata格式;

【文件】-【示例数据集】,有官方示例数据;

想要再次执行命令 时可双击【历史窗口】中的备份指令;

【编辑】-【首选项】或【右键】-首选项or字体;可以【保存首选项设置】,在【加载首选项设置】处可直接选用,若操作中需要使用中文文字,则需要将【加粗】前的勾全部去掉;

【Help】 中PDF documentation是Stata的电子手册,很有帮助。

【 Do-file Editor】的使用(常用+重要)

打开文件 eg课程讲义;

所有在【命令窗口】 输入的命令都可以集合写在【 Do-file Editor】里,有助于工作的延续性和保存复盘;

在【 Do-file Editor】中,开头带【*】的叫【注释语句】,可以添加文字说明;

执行命令,既可以到【命令窗口】执行,也可以在【 Do-file Editor】选中,点击【Do】;

在【 Do-file Editor】执行命令,可一次性选中多个命令,一次执行出来;

【sysdir set PLUS "D:\Stata MP 16\ado\plus" / / sysdir set PERSONAL "D:\Stata MP 16\ado\personal"】///更改系统工作、存储路径

【sysdir // 可以查看系统文件的放置位置

【help <指令> 】 // 用于查看指令的详细信息

【ssc install <指令>】 // 用于当找不到指令时,安装外部指令

B2 Stata文件路径

B2.1 当前工作路径

  • Stata的工作原理是从硬盘上调取一份数据,存入内存后经过一系列统计与回归分析运算,把相应结果输出的同时,也可另存一份数据到硬盘上。因此,要清楚的告诉Stata数据从哪个地方读取,结果存储到哪里。

Stata的左下角显示当前工作路径,如果使用【use】调用数据,则默认从该目录下调入数据

【cd "<指定路径>"】进入到我们指定的某个命令路径之下(例如,cd "D:\ ");

【cd <指定文件夹名称>】以当前工作路径为基础,进入到子目录里面(例如,cd _data)

【dir】显示当前工作路径下的文件信息

【cdout】打开当前工作路径对应的文件夹,进入windows操作界面

use "GTAs_2008.dta", clear 】 //从当前工作路径下读入数据 "GTAs_2008.dta"

  • *等价命令:
    ①【use "D:\Stata MP 16\ado\LY_stata_data\GTAs_2008.dta", clear 】完整路径下读取数据

  • ②【global path "D:\Stata MP 16\ado\LY_stata" //全局载元,[P2_local]篇详细介绍
    use "$path _data\GTAs_2008.dta", clear 】引用载元名称后再写上文件名称,就可以调出数据

B2.2 文件和文件夹的管理

  • 【pwd】显示当前工作路径在结果窗口,可复制了
  • 【expl】 Explore folders and files外部命令,很好用 , 显示一系列包含链接的文件信息,点击链接可打开相应的文件夹/文件,该命令可很好的管理文件夹和文件;
  • 【lall】list all ,列举当前工作路径下的文件和文件夹,[view]浏览文件,[edit]编辑文件,[do]执行do文档

循环语句,批量修改文件名称 (例如,问卷调查得到的问卷数据名称)

复制代码
  help fpref     //在文件名中批量添加前缀或后缀

    
  help fren      //批量修改文件明中字段
    
  help renfiles  //批量修改文件名

B2.3 stata 的系统文件设定

【sysdir // 可以查看系统文件 的放置位置,system+dir

复制代码
  sysdir

    
    STATA:  D:\Stata MP 16\
    
     BASE:  D:\Stata MP 16\ado\base\
    
     SITE:  D:\Stata MP 16\ado\site\
    
     PLUS:  D:\Stata MP 16\ado\plus\
    
 PERSONAL:  D:\Stata MP 16\ado\personal\
    
 OLDPLACE:  D:\Stata MP 16\ado\personal\_myado\

命令执行过程 ,stata只能识别存放于这些文件夹下的程序文件

  1. 从BASE文件夹中找一个同名的ado文件,找到则执行;
  2. 若BASE中没有,则在UPDATES中寻找;
  3. 若UPDATES也没有,则在PLUS中寻找;

若以上目录均找不到,则Stata输出无法识别命令。

【adopath】 //为Stata增加信任路径,即添加了可识别程序文件

  • adopath + "D:\Stata MP 16\ado\LY_stata_plus"

【Stata开机自启动基本设定】 如何设定? profile 文档

(1)将以下指令保存至Stata的根目录下,并命名为profile.do

复制代码
 *-基本参数设定

    
       set type double          // 后续产生的变量都将是双精度型的,有助于做拟合分析
    
       set memory 50m           // 为 stata 分配 50M 内存
    
       set matsize 2000         // 矩阵维度
    
       set scrollbufsize 50000  // 设定屏幕的最大显示行数
    
       set more off, perma      // 不分屏显示 
    
 	  
    
     *-log 文件设定
    
       log using    " D:\Stata MP 16\ado\personal\stata.log", text replace
    
       cmdlog using " D:\Stata MP 16\ado\personal\command.log", append
    
 	  
    
     *-文件目录设定
    
       sysdir set PLUS     "D:\Stata MP 16\ado\plus"     //外部命令的存放地址
    
       sysdir set OLDPLACE "D:\Stata MP 16\ado\personal\_myado"
    
       sysdir set PERSONAL "D:\Stata MP 16\ado\personal" //个人文件夹
    
 	  
    
     *-ado文档查找路径
    
       adopath + "D:\Stata MP 16\ado\personal"
    
       adopath + "D:\Stata MP 16\ado\personal\_myado" 
    
 	  
    
     *-指定默认工作路径
    
       cd "D:\Stata MP 16\ado\personal"

(2)关闭 stata 并重新打开, 如果设定无误, 则屏幕上应该显示如下信息:

  • running D:\Stata MP 16\profile.do ... (成功导入基本设定)

(3)还可以在profile文件中加入以下命令来确定每次启动时运行的盘符

复制代码
 dis _n(30)

    
 if "`c(sysdir_stata)'" == "D:\Stata MP 16/" | "`c(sysdir_stata)'" == "d:\Stata MP 16/"{
    
 	local D "D"
    
 }
    
 else{
    
 	dis in w "请在command窗口输入Stata所在的盘符,按回车键:______"
    
 	dis in w "Here is my Stata: " _request(isD)
    
 	local D "$isD"
    
 }

(4)在profile文件中加入以下指令,来自动以当前日期命名log文件 并存放于Stata\do 文件夹下

复制代码
 cap cd `c(sysdir_stata)'do

    
 if _rc{
    
 	mkdir `c(sysdir _stata)'do
    
 }
    
 local fn = subinstr("`c(current_time)'",":","",2)
    
 local fn1 = subinstr("`c(current_date)'"," ","",3)
    
 log using `c(sysdir_stata)'do\s`fnl'`fn'.log, text replace
    
 cmdlog using `c(sysdir_stata)'do\c`fn1'`fn'.log, replace
    
  
    
 * cd `D':\Stata MP 16\ado\personal	// Stata启动后自动进入该目录
    
 cd `c(sysdir_personal)'

B3 stata命令的语法格式

B3.1 简介

复制代码
     help summ


调入数据

复制代码
    	sysuse nlsw88, clear
  • 【sysuse】 和 【webuse】都是 【use】 命令的拓展命令,sysuse 用于从Stata的内置数据库中调取数据,webuse用于从网络上调取数据。
    • 多数命令和选项都可以简写
复制代码
     sum wage             // 直接针对某个变量计算基本统计量

    
     sum wage if race==1  // if 限定样本,==进行逻辑判断是否相等,=代表赋值
    
     sum wage in 1/10     // in 很少用,前十个观察值
    
     sum wage, detail     // 选项,灵活性

【bysort】前缀类型

例②不但根据婚姻状况,还进一步根据学历情况,去做工资和时间两个变量的基本统计量

复制代码
     bysort race: sum wage hours age  //前缀写法,通过race分类,计算所列基本统计量

    
 	bysort marr collgrad: sum wage hours

B3.2 Stata 的一般语法格式

复制代码
      help language

【summarize】可以有选择地填入其中一项或多项,例如是否填变量名称,一个或多个/限定样本范围/观察值范围/options选项设定拓展功能

复制代码
  summarize [varlist] [if] [in] [weight] [, options]

    
  前缀[prefix:] cmd [varlist] [=exp] [if] [in] [using filename] [, options]

Note: 【 options】通过逗号分割,无论多长,整条命令只能有一个裸露在外的逗号,逗号后为 options,
*-e.g. 1 【gen】 是取对数生成新变量,【tabstat】 是描述性统计分析

复制代码
  sysuse nlsw88, clear

    
  gen lnwage = ln(wage) // 对变量取对数,生成新变量
    
  gen yes_white = (race==1)  // [=exp]
    
  tabstat lnwage hours married age, by(yes_white) s(mean) f(%3.2f) //逗号前是变量,后面选项

*-e.g. 2 绘制标准普尔500指数,某年份的收盘价价格走势

复制代码
   sysuse sp500, clear

    
   twoway line close date, title("收盘价", place(left))

第二行的第一个逗号前为指定变量和绘图类型,后面一个逗号包含在指定选项options(图形title)内,并未裸露在外。

B3.3 变量的引用

复制代码
     help varlist

*Stata支持的*三种通配符: , ?, -

复制代码
 *实例 对nlsw88数据中选取的几个变量进行分析

    
 sysuse nlsw88, clear
    
 sum age race married never_married grade // 一个个列出最复杂;
    
 sum age-grade    // 顺序出现的变量(看Stata界面右上角的变量列表),列出头尾两个变量即可;若中间不 
    
                 连续,则可以分成几个连续的段进行处理
    
 sum s*           // 以"s"为首的所有变量都可以表示出;"*" 是孙悟空,可以表示`任何'长度的字母或数字
    
 sum *arr*        // 包含"arr"的所有变量都可以表示出;可以用在任何位置
    
 sum ?a?e         // "?" 是猪八戒,只能替代`一个'长度的字母或数字
    
 sysuse , clear

B3.4 因子变量: 变量的前缀(提高书写效率)

复制代码
     help fvvarlist // factor variable

【i.】 【C.】 结果直接呈现了连续变量,类别变量race本身有三类,但是为了共线性问题 将频数最高项,即白人作为基准组(对照组)剔除。其中race下的2实际对应一个虚拟变量,若为黑人则取1,否则取0,3同理。行业虚拟变量同理种族虚拟变量。

复制代码
 *实例 研究工资wages的决定因素:任期tenure,工时hours,虚拟变量i.race和i.industry

    
    sysuse nlsw88, clear
    
    tab race                                 // 类别变量-种族类别的表输出
    
    reg wage tenure hours i.race i.industry  // 针对类别变量(种族和行业)i.自动产生虚拟变量(临 
    
                                            时),输出表格会剔除基准项(其中量最大的项)
    
    reg wage tenure hours age c.age#c.age    // 对于连续变量(age),前面加C.表示连续;研究age对 
    
                                            wage是否有平方关系,指代平方项 #
    
    reg wage tenure hours     c.age##c.age   // 与上一行命令等价,简写 ##
    
    reg wage tenure hours i.marr i.marr#c.hours // 交乘项

B3.5 时间序列变量的简写

复制代码
    help tsvarlist // time series

【D.】 【L.】 【F.】

复制代码
 *实例 根据时间序列进行排序

    
  sysuse sp500, clear      //调入数据
    
  tsset date               //根据时间序列变量排序,每个观测值的时间先后顺序
    
  gen t = _n               //gen t 产生一个新变量 t = _n
    
  tsset t                  //使得变量是连续时间序列
    
  gen lnP = ln(close)      //计算收盘价的自然对数
    
  gen return = D.lnP       //D.表示后面变量的一阶差分,D.lnP即收益率
    
  gen Lreturn  = L.return  //L.表示后面变量的一阶滞后,L.return即前一天的收益率
    
  gen L2return = L2.return //L2.表示二阶滞后项,L2.return即前两天的收益率
    
     
    
  reg return L.return L2.return           
    
  reg return L(1/3).return F(1/2).return  //回归时不必产生这些变量,L(1/3)一到三阶滞后项;F(1/2)一到二阶前推项

Note: ①可打开数据编辑器;②上述操作同样适用于面板数据

B4 帮助文件和外部命令

B4.1 简介

【help contents】 帮助我们看到help文档的整体架构

【help help】help 命令的帮助文件
【help guide】basic Stata concepts

【help tabstat】

  • ①点击“(View complete PDF manual entry)”可以查看帮助文件的pdf文件,pdf文件中列举了许多范例;②帮助文件右上角的下拉菜单 对话框Dialog–>tabstat
  1. 用于填写菜单命令(针对对数学命令不熟悉的情况,填写相关菜单命令后stata自动生成对应的文字命令);
  2. Also See(另见)是同现在输入的tabstat命令相关的命令,横向关联;
  3. Jump To(跳转)是具体目录,例如Description跳转到该命令的整体介绍,Examples提供范例。

B4.2 命令的检索

【help findit 】//网络搜索,查找外部命令和范例

例如,【findit dynamic panel】、【findit median test】

其中【xt】开头为Stata的官方命令,【sj】开头的为Stata期刊中命令,其他为用户自己编写的外部命令。

【实现高效检索的建议】

(1) 单词的大小写和顺序 不影响检索结果
(2) 介词可以省略
(3) 尽量不用复数形式,distribution 优于 distributions
(4) 不用进行时, median test 优于 medians testing
(5) 逐渐缩小检索范围:distribution --> normal distribution
(6) 可以用如下名词限定检索范围

  • data e.g. findit data outlier(限定在数据处理这一块儿的离群值)
  • statistics || 简写为 stat e.g. findit stat median
  • graph e.g. findit graph kdensity
  • program || 简写为 prog e.g. findit loop

B4.3 管理来源于 ssc 的命令

复制代码
      help net_mnu  // 外部命令的来源

【search】 —— 与【findit】相似,
Stata Journal —— Stata期刊;STB —— Stata技术报告;Other locations(meetings,users等)都提供了很多命令。

复制代码
    help ssc     // http://www.repec.org/

【ssc】 Statistical Software Components,统计软件组件的网站

(1)找命令

复制代码
      ssc whatsnew       //定期查看来源于 SSC 的外部命令列表,看有哪些新的命令加入,注意命令发布时间
复制代码
 ssc des b        // describe,列示以 -b- 开头的所有命令,可为 a-z,以及 "_"

    
 ssc des x        // 选中命令可安装
    
 ssc des winsor2  // 设置关键词

(2)安装 ssc 命令(预先知道命令的名称)

复制代码
    *实例 ssc install winsor, replace //安装winsor命令并自动更新

B4.4 外部命令的管理和使用

复制代码
    help net  //  *外部命令存放地址,使用net命令

(1)使用以下两条命令来指定下载的命令以及相关辅助数据、说明文档存放的位置。

*实例,指定下载的外部命令存放的地址,提前在指定路径下建好myplus文件夹

复制代码
    net set ado "D:\Stata MP 16\ado\personal\myplus"

(2)查询已安装的外部命令
*- -ado-, -mypkg-, -which-

复制代码
     ado                   //呈现本机上安装的所有外部命令

    
     ado, find(winsor)     //仅呈现包含特定关键词(winsor)的外部命令
    
     ado, find(panel unit)

(3)其他管理外部命令的指令 help mypkg (package)

复制代码
     mypkg                 //呈现本机上已安装的外部命令(将外部命令按字母顺序排列)

    
     mypkg xt*             //呈现 xt 开头的所有外部命令 
    
     which winsor2         //列示命令的基本信息

B4.5 更多的帮助和讨论

*-连享会主页:lianxh.cn
view browse "连享会主页"
*-Stata 官网: 常见问题解答:FAQ
view browse "Stata | FAQ: The Statalist FAQ"
*-Stata 官网: 加入STATA用户邮件列表
view browse "Statalist | The Stata Forum"
*-中文: 人大经济论坛【stata专版】
view browse "Stata专版_stata软件_stata下载_stata教程-经管之家(原人大经济论坛)"

B5 stata中的变量名称

B5.1 新变量的名称

generate [type] newvar[:lblname] =exp [if] [in] [, before(varname) |after(varname)]

复制代码
   help gen         //gen:generate, Create or change contents of variable

    
   help egen        //egen:Extensions to generate
    
   help varname     //新变量命名规则
    
   help newvarlist  //多个新变量

*新变量命名基本规则:
(1) 由英为字母、数字或 _ 组成,至多不超过 32 个字符;
(2) 首字母必须为 字母 或 _ ;
(3) 英文字母的大写和小写具有不同的含义。

*特别注意:
建议不要使用 “_” 作为变量的第一个字母,
因为许多stata的内部变量都是以 _ 开头的,如,_n, _N, _cons, _b 等等。

复制代码
 *示例: 

    
  (1) 合理变量名: roa, abc_1, a1, Gdp_growth
    
  (2) 非法变量名: 5gdp 2invest
复制代码
     help _variables   // 下划线变量,是内置的System variables,由系统创建和更新

B5.2 变量重命名

复制代码
   help rename        //单个重命名

    
   help rename group  //批量重命名,功能很强大
    
   help renvars       //批量添加前缀或后缀,合并数据时非常有用
复制代码
   sysuse auto, clear

    
   rename make mk
    
   rename (price rep78) (Price REP78) //批量重命名,右上变量窗口可看
    
   rename mpg foreign trunk, upper    //upper批量大写
    
   
    
   sysuse auto, clear // D2_gen.do
    
   renvars price mpg wei, prefix(d1_) //给price mpg wei三个变量批量增加前缀“d1”
    
   des            //查看输出结果

B5.3 变量标签 (variable label)

复制代码
 help label

    
 *实例 
    
   sysuse auto, clear
    
   des
    
   label var price "汽车价格($)"(给变量price改变标签“汽车价格”,右上变量窗口可看)
    
   label var rep78 "维修次数"
    
   des          //查看效果

B5.4 数字-文字对应表 (value labels)

  • *大型问卷调查,多数都是类别变量编码。使用数字对应的文字标签来对数字含义进行说明。
  • *实例 browse rep78 // 浏览维修次数的【数据编辑器】对应表
复制代码
   *-Step1: label define, 定义标签内容

    
     label define rep78 1 "很好" 2 "较好" 3 "中等" 4 "较差" 5 "很差"
    
     
    
   *-Step2: label value, 将变量与标签内容关联起来
    
     label value  rep78 rep78  // 第一个rep78是变量名称,后一个rep78是标签的名称(为了简单起见,将变量名称和标签名称定义为相同的)
    
  
    
     label list rep78     //查看对应关系
    
     des2 rep78           //建议采用这种方式, 简洁
    
     br   rep78           // br即browse浏览查验结果
    
     tab rep78 foreign    //生成表格,选中表格中“中等”可在右上显示实际值

B5.5 列示和查看变量

复制代码
   help des   //describe变量概况

    
   help ds    //仅列示变量名称, 复制粘贴留作后用
    
   help des2  //外部命令,提供蓝色连接,便于查看数据特征eg(点击出现tabulate price制表价格)

*实例

复制代码
   sysuse nlsw88, clear

    
   des        //几乎每一笔数据进来都要先执行该命令
    
   ds         //仅显示变量名称
    
   ds, alpha  //按字母顺序排列显示
    
   ds, varwidth(16)
    
   des2       //完全替代了 des 命令,点击变量出现制表详情

B5.6 查找变量

复制代码
   help lookfor     //基本够用

    
   help lookfor_all //外部命令
    
   help findname    //外部命令

*实例

复制代码
   use d_lookfor, clear

    
   lookfor "现金流"
    
   lookfor "报酬"

*-Also See:

*-B3_syntax
doedit "path\B3_syntax.do" *-D1_import doedit "path\D1_import.do"

B6 do文档

B6.1 何谓 do-file (do文档)?

(1) do 文档实际上是Stata命令的集合,方便我们一次性执行多条stata命令;
(2) do 文档的使用使我们的分析工作具有可重复性;
(3) 在一篇文章的实证分析过程中,我们通常将数据的分析工作写在 do 文档中。

B6.2 do 文档的使用

A. 新建和打开 do-file

  • doedit // 开启 do-editor, 建立一个空白的 do-file,保存好

doedit B5_variable.do // 打开一个已存在的 do 文档,注意要在do文件原本路径下打开

  • 点击 Stata 主界面中的倒数第六个按钮

B. Do-file Editor 属性设定 【Do-file Editor窗口中的 编辑–》首选项 修改偏好设置】,可修改行号, 高亮显示, 自动缩进,字体等
C. Do-file转换成 PDF 文件
*-File > Print > 打印机 > Microsoft print to PDF
D. 保存和关闭 do-editor

*-时刻保留你的 do-file, 用它记录所有的处理过程;
*-中间过程产生的数据不必保存,只需执行相应的 do-files 即可
E. 执行 do 文档—— 选中内容①点击图标;②【快捷键】:Ctrl+D ;③默认不选中命令语句时执行整个文件

B6.3 合理规划你的 do-file

A. 一些基本规则

  • 提高 do 文档的可读性(空格、括号加在合适的地方)
复制代码
  gen z = z + y    is better than   gen z=z+y

    
  gen z = x^2      is better than   gen z = x ^ 2
    
  gen t = hours + minutes/60 + seconds/3600  is better than gen t = hours + minutes / 60 + seconds / 3600
    
  list price if (foreign==1)&(rep78>3) is better than list price if foreign==1&rep78>3
  • 断句和断行

(1)注释语句 help comments

复制代码
       *   第一种注释方式

    
       sum price weight    /* 第二种注释方式 */
    
       gen x = 5           // 第三种注释方式

(2)断行 (三种方式: ///、/* */、#delimit 命令

每一行的语句不要太长,不用拖动下方导引条即可阅读;各段代码采用一个或多个空行加以分隔;

【Note:注释和断行的反斜杠前至少要有一个空格】

复制代码
        *-第一种断行方式: ///  
    
          sysuse auto, clear 
    
          twoway (scatter price weight)       ///
    
                 (lfit price weight),         ///
    
                 title("散点图和线性拟合图")          //四行两句命令
    
                
    
        *-第二种断行方式: /* */                      //不常用
    
          twoway   (scatter price weight)      /* */ (lfit price weight),        /* */ title("散点图和线性拟合图")   
    
               
    
        *-第三种断行方式: #delimit 命令  
    
        #delimit ;	// 设置断行的标记符号为“;” (Stata默认出现回车即认为发生断行,所以使 
    
                                                用delimit来改变发生断行的标记符号)
    
            sysuse auto, clear; des; sum;    //为三条语句
    
            twoway (scatter price wei)
    
                   (lfit price wei),
    
                   title("散点图和线性拟合图");
    
          #delimit cr                        // 退回为回车断行的标记方式

B7 stata中的函数功能

复制代码
     help functions

主要涉及以上的几大类函数:
math functions——数学函数
density functions——密度函数,用于描述随机变量的分布形态
random-number functions——产生随机数的函数
string functions——字符函数
programming functions——编程函数
datetime_functions——有关时间函数,用于时间序列
time-series functions——有关时间函数,用于时间序列
matrix functions——矩阵函数

复制代码
     help egen        // egen用于使用函数来产生新变量,参见 D5_egen

B7.2 Math functions

复制代码
  help math functions

    
    *实例
    
     sysuse nlsw88.dta, clear
    
     
    
     gen ln_wage = ln(wage)          //以 e 为底数取对数
    
     gen log_wage= log10(wage)       //以 10为底数取对数
    
     
    
     gen int_tenure  = int(tenure)   //取整
    
     gen round_tenure= round(tenure) //四舍五入
    
     list *tenure in 1/20            //列出前20个
    
     
    
     des2 industry                         //对于类别变量,处理分为直接基于类别变量分析或是定义虚 
    
                                         拟变量(即转化 为0,1)
    
     gen dummy = inlist(industry, 7,8,11)  //定义虚拟变量,这里是定义下图中的标号为7,8,11的三个 
    
                                         行业属于同一类(取1),其他的为另一类(取0)
    
    * inlist括号内第一项为类别变量的名称,逗号之后列举要展示的数字,后面可以附加10个内文字信息
    
     br industry dummy, nolabel            //查看定义虚拟变量后的结果

B7.3 String functions
【 tostring a, b】数字→文字;【substr(a, 1, 3 )】【 destring a,b,c】文字→数字

在Stata的数据编辑器里,文字是红色,数字是黑色

复制代码
 help string functions

    
 	
    
   *-例-1-:股利分配数据-年月日的分离
    
   
    
     use tostring2.dta, clear
    
  
    
     tostring date_pub, gen(date1)    // 数字-->文字(变量存储类型的变化)
    
 	
    
     gen year  = substr(date1, 1, 4)  // 使用substr函数进行切割,取出前四位
    
     gen month = substr(date1, 5, 2)  // 从第五位开始取两位
    
     gen day   = substr(date1, 7, 2)
    
 	
    
     destring year month day, replace // 文字-->数字
    
     	
    
 	
    
   *-例-2-:银企关系数据中银行名称的提取
    
   
    
     *-数据描述
    
 	  use bankname.dta, clear
    
 	  compress     //精简存储格式,double → int, str190 → str75
    
 	  keep in 1/15 //压缩保留前面1/15的观测值
    
 	  
    
 	*-任务:提取出关联银行总部的名称(思路:查找替换)
    
 	  gen bank = objnm
    
 	  replace bank="中国农业银行" if strmatch(bank,"*农业银行*")
    
 	  replace bank="招商银行"     if strmatch(bank,"*招商*")
    
 	  replace bank="中国银行"     if strmatch(bank,"*中国银行*")
    
 	  replace bank="中国工商银行" if strmatch(bank,"*工商*")
    
 	  replace bank="兴业银行"     if strmatch(bank,"*兴业*")
    
 	  replace bank="光大银行"     if strmatch(bank,"*光大*")
    
 	  replace bank="交通银行"     if strmatch(bank,"*交通*")
    
 	  replace bank="北京银行"     if strmatch(bank,"*北京*")
    
 	  browse

其他常用字符函数

复制代码
     help substr()    //截取

    
 	help strmatch()  //查找替换
    
 	help strpos()    //字符出现的位置
    
 	help subinstr()  //替换字符
    
 	help subinword() //替换单词

B7.4 Random-number functions(常用于蒙特卡罗模拟)

相关应用:help simulate help bootstrap

复制代码
   help random_number_functions

    
   
    
   clear 
    
   set obs 10000
    
   
    
   gen x_u = runiform()  //服从 U~(0,1) 均匀分布的随机数 
    
   histogram x_u         //绘图
    
   
    
   gen x_n = rnormal()   //服从标准正态分布的随机数
    
   histogram x_n
    
   
    
   gen x_p = rpoisson(5) //服从自由度为 5 的泊松分布
    
   histogram x_p

全部评论 (0)

还没有任何评论哟~