Stata基础操作:数据管理
Stata WorkShop2:Data Management
Chang Y. Chung
Princeton University |
/*在当前工作路径下建立dm文件夹并进入*/- cap findfile dm
- if "`r(filename)'" == "" mkdir dm
- cd dm
复制代码 |
/*下载数据、解压、进入解压包*/- copy "https://codeload.github.com/Chang-Y-Chung/dm/zip/master" "dm-master.zip"
- unzipfile "dm-master.zip", replace
- cd dm-master
复制代码- /*注:filename也可简写为fn即:
- if "`r(fn)'" == "" mkdir dm
- cd为进入某一文件夹用,也可输入pwd查看当前工作路径(可复制)*/
复制代码 cd 用法:
1. 后不加路径名,显示当前路径
2. 后加路径名,更改至新路径。
区分绝对路径与相对路径:
• 绝对路径。即完整的的文件夹/文件所在地址,如新建personal文件夹:
- mkdir "E:\Stata13.0\ado\personal"
复制代码 • 相对路径。指相对于当前工作目录,其他文件/文件夹所在的地址,如上例建立personal文件夹的另一种方法:
- cd "E:\Stata13.0\ado"
- mkdir "personal"
复制代码由于" \ "(backslash)在windows系统中既是组成地址名的一部分,而且还可被视为转义符(escape character),所以在路径描述中,往往以 "/ "替换,以继续在personal文件夹下建do文件夹为例:
注:“.” 表示当前工作路径,“..” 则表示上一级目录
注:如果路径名(文件夹名)中存在空格,如E:\stata13 and stata14(stata13和and间存在空格),那么需要加双引号(其实不管有无空格,加双引号是一个很好的习惯)- cd "E:\stata13 and stata14"
复制代码 查看当前工作路径也可输入pwd
/*寻找某一变量:lookfor*/- sysuse auto,clear
- lookfor price
复制代码 即可查看变量标签/变量值标签/存储格式/显示格式
/*查看以及在日志中记录数据集信息*/- display _newline "Datafile:`c(filename)'(N=`c(N)',k=`c(k)') as of `c(filedate)'"
复制代码
|
| /*Display-演示或计算*/ |
- clear all
- display 1 + 2
- display ln(0.3 / (1 - 0.3))
- display logit(0.3)
复制代码- // 字符
- display "hello, world?"
- // 呈现系统内容,如当前日期
- display c(current_date)
复制代码
|
- // 清空内存
- clear all
- // 描述当前数据特征
- describe
- // 设定观测值个数
- set obs 5
- // 产生新变量x,全部为1
- generate x = 1
- //产生新变量y,为序列号
- generate y = _n
- // 内存数据转硬盘
- save mydata.dta, replace
复制代码 |
| /*使用和列示数据集*/ |
- use mydata, clear // 将上述数据载入内存
- list
复制代码 |
/*Rename*/
/*Replace*/ |
- use mydata, clear
- replace x = 2
- // 将所有x值变为2
- //在含in和if的语句中较常出现
- replace x = 3 in 1/3
- browse
- replace y = 9 if y == 5
- browse
复制代码 |
- // 在条件语句中指定其它变量
- replace x = -99 if y < 3
- // 假定x=-99和y=9的数据为缺失值
- replace x = . if x == -99
- replace y = . if y == 9
- save mydata2, replace
复制代码 |
| /*查看 mydata2.dta*/ |
- use mydata2, clear
- list in 1/5
复制代码 |
| /*随机数的生成*/ |
- clear all
- set obs 50
- set seed 12345
- generate x = runiform()
- generate y = runiform()
- twoway scatter x y
- graph export random.png, width(400) height(300) replace
复制代码 |
|
| //set seed 保证每次呈现结果相同 |
| /*缺失值*/ |
|
/*将数据在某临界值处切分*/
以Y=2.5处为例,小于2.5记为0,大于2.5为1 |
| //不太正确的做法 |
- use mydata2, clear
- generate high_y = 0
- replace high_y = 1 if 2.5 < y
- list
复制代码
|
| //正确做法: |
- generate high_y2 = 0 if !missing(y)
- replace high_y2 = 1 if 2.5 < y & !missing(y)
- save mydata3, replace
复制代码
|
- //比较
- use mydata3, clear
- list y high_y high_y2
复制代码
|
| /*录入与保存*/ |
- clear all
- input id str10 name yob
- 1 "Amy" 1990
- 2 "Bill" 1991
- 3 "Cathy" 1989
- end
- rename yob year_of_birth
- save birth, replace
复制代码
|
| /*调用*/ |
- use birth, clear
- assert _N == 3
- list, abbreviate(15)
复制代码
|
/*添加标签*/- use birth.dta, clear
- generate gender = 1 if name == "Amy" | name == "Cathy"
- replace gender = 2 if name == "Bill"
- tabulate gender
- save birth2, replace
复制代码 /*两步给变量值加标签*/ |