1 打开示例数据和网络数据:use

示例数据为 STATA 帮助文件中所用的数据,其后辍名为.dta,如果在 STATA软件当前路径下,直接用 use 命令即可打开;如果不在当前路径下,则可以使用sysuse 命令打开。
从网络获取数据

  1. . use http://www.stata-press.com/data/r9/nlswork //从网站获取数据,或者
  2. . webuse nlswork, clear //与前一命令等价,从 STATA 官方数据库获取数据

use 命令只能打开后辍名为“*.dta”格式的数据,.dta 格式以外的数据,STATA不能直接读取,需要从外部读入,最简单而直接的办法是复制和粘贴。

2 数据类型

STATA 通常把变量划分为三类:分别是数值型,字符型和日期型

1 数值变量

image.png

  1. . compress //在不损害信息的基础上压缩,使数据占用空间尽可能小
  2. . replace a=32741 //直接变到 long 型,因为 int 型最大只能到 32740
  3. . gen double b=1 //直接生成双精度变量 b
  4. . recast double a //将 a 变成双精度变量 b
  5. . d //注意到 a 和 b 均为双精度型

2 字符串变量

字符串变量由字母或一些特殊的符号组成(如地名〈籍贯〉变量,迁出地,住址,职业等等)。字符串变量也可以由数字来组成,但数字在这里仅代表一些符号而不再是数字。字符串变量通常以引号“”注标,而且引号一般不被视同为字符的一部分,注意这里的引号必须是英文输入状态下的引号。
字符串最多可以达 244 个字符。一般用 str#来表示字符的多少,如 str20表示将有 20 个字符。一般三个中文字的姓名需要 6 个字符。
字符型示例
“String” “string” ” string” ”string ”
“” //特殊字符串,表示空字符,缺失值。
“ “ //注意与空字符串的区别,含有一个空格
”125.27” //”125.27”由于有双引号,将被视同为字符而非数值。
“$2,343.68” “I love you” “旺材是条狗”
注意前四个字符串均不相同,大小写是不一样的,有无空格及空格的位置不同,都表示不同的字符串。对于”125.27”这样的数值型的字符串,可以用 real()函数或者 destring 命令转化成数值型变量。

3 日期型变量

在 STATA 中,1960 年 1 月 1 日被认为是第 0 天,因此 1959 年 12 月 31 日为第-1 天,2001 年 1 月 25 日为 15000 天。对日期型变量的讨论将在后面的时间序列分析部分
1999 12 10
jan/10/2001
10jan2001

-15,000 —- 01dec1918
-31 —-01dec1959

-1 —- 31dec1959
0 —- 01jan1960
1 —— 02jan1960

4 缺失值

没有意义的计算结果显示为”.”

  1. . display 2/0

另一种情况是,数据中含有缺失值,而 STATA 默认的缺失值也用“.”来表示。在有些数据文件中,缺失值不是用“.”或者空来表示的,而是用-9996 等
来表示,如果要将其全部替换为“.”,或者反之,将“.”替换为-9996,命令为:

  1. . mvencode age,mv(-9996)
  2. . mvdecode age,mv(-9996)

3 数据类型转化

任务:将 destring1, destring2 和 tostring 中的数据类型进行相互转化

1 字符型转化成数值型:destring

.destring, replace //全部转换为数值型,replace 表示将原来的变量(值)更新
.sum //注意到转换为数值型后,可以求五数概略了
*————————将字符型数据转换为数值型数据:去掉字符间的空格——————
实验:测试有点问题

  1. gen d = "123"
  2. destring, replace

时间数据

  1. *destring2 数据集中的 data 变量为字符型,且年月日间有空格,转移为数据型
  2. .webuse destring2, clear
  3. .des //注意到所有的变量均为字符型 str
  4. .list date //注意到 date 年月日之间均有空格

date
1. 1999 12 10
1. 2000 07 08
1. 1997 03 02
1. 1999 09 00

  1. .destring date, replace //想把 date 转换成数值型,但失败了,系统提示说
  2. date contains non-numeric characters; no replace /由于含有非数值型字符(即空格),因此没有更新,也即转换命令没有执行。*/
  3. .destring date, replace ignore(“ ”) /忽略空格,然后转换,注意这里的" "中间有一个空格,不是""。/
  4. date: characters space removed; replaced as long //成功转换为 long 型
  5. .des //注意到 date 的 storage type 已变为 long
  6. .list date //注意到空格消失了

date
1. 19991210
1. 20000708
1. 19970302
/与 date 变量类似,变量 price 前面有美元符号,变量 percent 后有百分号,换为数值型时需要忽略这些非数值型字符。/
美元等其它符号
/与 date 变量类似,变量 price 前面有美元符号,变量 percent 后有百分号,换为数值型时需要忽略这些非数值型字符。/

  1. .destring price percent, gen(price2 percent2) ignore(“$ ,%”)
  2. .list //注意到 price2 前面的$号消失,percent2 后面的%号消失

2 数值型转化为字符型:tostring

  1. .tostring year day, replace //将年和日转化为字符型

4 数据显示格式:format

/format 只控制数据的显示格式,并不改变内存中数据的大小。/
*注意到, stata 变量的格式为%14s,表示右对齐,共 14 个字符,%为固定用法
image.png

  1. .format state %-14s // 该命令使 stata 的显示格式左对齐,14 前面多了个负号

image.png

  1. .format pop %11.0gc /*pop 的显示格式为%11.0g,后面加上 c,则每三位数间用逗号分开,c 为 comma 的意思.*/

image.png

  1. .gen id=_n //生成一个新变量 id,取值依次为 1,2,3
  2. .replace id=9842 in 3 //将 id 的第三个变量替换为 9842
  3. .list in 1/3

image.png

  1. .format id %05.0f //对于编号,我们希望前面用零使得位数对齐
  2. .list in 1/3 //注意到通过在前面补零,所有的 id 都成了 5 位数。

image.png

5 在 STATA 中直接录入数据:input

任务:按学号录入五个学生的经济学成绩
image.png

1 菜单式操作

image.png

2 命令操作

操作:在 command 窗口中键入(注:前面的点号不必健入,每完成一行按回车键,黑体为命令,斜体为变量名或文件名):对于字符型变量,需要指明其为字符型
并指明最大的字符长度。

  1. clear //清空内存
  2. input id str10 name economy //输入变量名,特别注意姓名前的 str10.
  3. 1 John 40 //录入第一个学生的学号和成绩
  4. 2 Chris 80 //录入第二个学生的学号和成绩
  5. 3 Jack 90
  6. 4 Huang 70
  7. 5 Tom 53
  8. end //录入数据结束
  9. save economy //保存数据到当前路径,文件名为 economy

3 程序操作

(1)打开 do file editor,键入以下内容:

  1. cd E:/学习/stata
  2. clear //清空内存
  3. input id str10 name economy //输入变量名,特别注意姓名前的 str10.
  4. 1 John 40 //录入第一个学生的学号和成绩
  5. 2 Chris 80
  6. 3 Jack 90
  7. 4 Huang 70
  8. 5 Tom 53
  9. end //录入数据结束
  10. save economy //保存数据到当前路径,文件名为 economy

(2)保存程序文件为 mydo
(3)点击 ,执行后得到数学成绩

6 导入导出其他格式数据

经常会遇到的情形是:我们有其他格式的数据,需要导入到 STATA 中进行分析,建议大家此时将其他格式数据复制到分析数据的文件目录下,然后直接用
STATA 的导入数据文件命令导入原始数据,用程序模式进行处理,然后导出处理结果。这样做的最大好处是:既不会破坏最原始的数据文件,又使我们的每一步数据处理和分析过程都有迹可循。

1 insheet 命令

注意切换到test.csv的目录下:

  1. cd E:/学习/stata/test_learn
  2. insheet using test.csv, clear

image.png

2 infile 命令

对于“3origin.txt”或“3origin.csv”,还可用 infile 命令导入 STATA,此时需要先指出变量名。尤其要注意,当变量为字符型时,要先指明。

  1. infile id str10 name gender minority economy math using origin.csv, clear

没有掌握

3 infix 命令

还有一种标准化的数据,每个变量的位数是确定的,不足时,前面用 0 补齐,
114068
128052
029076
024390
如果遇到这种数据格式,需要对照数据说明导入数据,相应的命令为:

  1. infix gender 1 minority 2 economy 3-4 math 5-6 using origin.csv, clear

其中的数字为对应的数字位数。

4 outsheet 命令

与前述三个命令相反,有时我们需要将 STATA 数据导出为其他格式数据,比如文本格式或后缀为 acs 的格式:此时需要使用 outsheet 命令实现,该命令的
基本格式如下。

  1. outsheet using sys_data.txt
  2. outsheet using sys_data.asc

image.png
此时建立的文件 sys_data.txt 第一行为变量名,第 2~6 行为变量值。变量列间用Tab 键分隔。如果不希望在第一行存储变量名,则可以使用 nonames 选项。如果文件已经存在,则需要使用 replace 选项,相应的命令分别为。
//

  1. outsheet using sys_data.asc, nonames
  2. outsheet using sys_data.asc, nonames replace

image.png

5 使用 transfer 软件

Transfer 软件专用于转换不同格式的数据文件,使用起来非常方便。只需要在 input File Type 栏中选择需要转化的原数据文件类型,然后定位打开需要转化的原数据文件。再选定输出文件类型,指定输出文件的存放位置和文件名。最后点击 transfer 按钮。数据便被转化。该软件可在 http://www.pinggu.org/bbs 上下载试用,不过做正式工作,建议采用正版软件。

6 标签数据:label

要掌握的命令:为了创建一个完整的文件,要掌握下面的命令。
image.png

1 变量重命令:rename

2 标签文件:label data

/ 为避免时间太长,忘记变量的含义,我们可以用 label 命令来标记。该命令可以用来标记数据文件,如将文件取名为“2007 年秋 5632 班学习成绩单” /

  1. label data 2021 econmy data

在文件处理过程中加注说明,命令为

  1. notes
  2. note: 2021 econmy data

下一次打开数据,要查看创建和数据处理的说明时,直接键入
note
image.png

3 标签变量:label var

道理同上
label var id “序号”

4 标签变量值:label define 和 label values

  1. label define genderlb 1 "男" 0 "女"
  2. list
  3. label values gender genderlb
  4. list

image.png

5 标签增加与修改:add 和 modify

/ 定义完汉族和少数民族后发现还有些学生的民族是不知道的(原始值为 3),则/

  1. label define minoritylb 3 不知道”
  2. *然而结果窗口却显示出如下错误信息,
  3. label minoritylb already defined

因为 minoritylb 已经存在并被定义,我们需要加上选项,add

  1. label define minoritylb 3 “不知道”, add
  2. list
  3. label define minoritylb 3 dont know”, add

/_试图将“不知道”改为英文“don’t know”,再次显示错误 _invalid attempt to modify label 因为 3 已被定义,这次不是增加而是修改,所以选项为,modify*/

6 标签显示与删除:dir 和 drop

  1. label dir //显示标签
  2. label list //显示标签的赋值含义
  3. list
  4. label drop genderlb //删除标签
  5. label dir //再显示标签
  6. list //注意到 genderlb 显示的是 0 1

image.png

7 保存和删除数据文件:save 和 erase

compress //压缩数据,使之在不损失任何信息的前提下占用空间最小
save mydata //保存数据,数据文件名为 mydata
*如果同一文件夹下已经存有 mydata.dta,而你又要再次执行 save mydata 时,
系统会出现提示

  1. save mydata
  2. file mydata.dta already exists
  3. *该提示表示数据已经存在,此时我们可以换名保存
  4. save mydata1
  5. *或者将原文件覆盖,方法是加上 replace 选项
  6. save mydata, replace
  7. *删除文件,erase
  8. erase mydata1.dta
  9. *注意:删除文件时一定要带上后缀名。