楼主: 匿名
2638 13

[Stata] 数据管理(一) [推广有奖]

匿名网友
楼主
匿名网友  发表于 2015-7-11 22:45:50 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

Stata基础操作:数据管理
Stata WorkShop2:Data Management
Chang Y. Chung
Princeton University

/*在当前工作路径下建立dm文件夹并进入*/
  1. cap findfile dm
  2. if "`r(filename)'" == "" mkdir dm
  3. cd dm
复制代码
/*下载数据、解压、进入解压包*/
  1. copy "https://codeload.github.com/Chang-Y-Chung/dm/zip/master" "dm-master.zip"
  2. unzipfile "dm-master.zip", replace
  3. cd dm-master
复制代码
  1. /*注:filename也可简写为fn即:
  2. if "`r(fn)'" == "" mkdir dm
  3. cd为进入某一文件夹用,也可输入pwd查看当前工作路径(可复制)*/
复制代码
cd 用法:
1. 后不加路径名,显示当前路径
2. 后加路径名,更改至新路径。
区分绝对路径与相对路径:
• 绝对路径。即完整的的文件夹/文件所在地址,如新建personal文件夹:
  1. mkdir "E:\Stata13.0\ado\personal"
复制代码
• 相对路径。指相对于当前工作目录,其他文件/文件夹所在的地址,如上例建立personal文件夹的另一种方法:
  1. cd "E:\Stata13.0\ado"
  2. mkdir "personal"
复制代码

由于" \ "(backslash)在windows系统中既是组成地址名的一部分,而且还可被视为转义符(escape character),所以在路径描述中,往往以 "/ "替换,以继续在personal文件夹下建do文件夹为例:

  1. mkdir "./do"
复制代码

注:“.表示当前工作路径,.. 则表示上一级目录


1.JPG

注:如果路径名(文件夹名)中存在空格,如E:\stata13 and stata14(stata13和and间存在空格),那么需要加双引号(其实不管有无空格,加双引号是一个很好的习惯)
  1. cd "E:\stata13 and stata14"
复制代码
查看当前工作路径也可输入pwd
  1. pwd
复制代码

pwd.jpg


/*寻找某一变量:lookfor*/
  1. sysuse auto,clear
  2. lookfor price
复制代码
即可查看变量标签/变量值标签/存储格式/显示格式
/*查看以及在日志中记录数据集信息*/
  1. display _newline "Datafile:`c(filename)'(N=`c(N)',k=`c(k)') as of `c(filedate)'"
复制代码

display.JPG


/*Display-演示或计算*/
  1. clear all
  2. display 1 + 2
  3. display ln(0.3 / (1 - 0.3))
  4. display logit(0.3)
复制代码
  1. // 字符
  2. display "hello, world?"

  3. // 呈现系统内容,如当前日期
  4. display c(current_date)
复制代码

9.PNG


  1. // 清空内存
  2. clear all
  3. // 描述当前数据特征
  4. describe
  5. // 设定观测值个数
  6. set obs 5
  7. // 产生新变量x,全部为1
  8. generate x = 1
  9. //产生新变量y,为序列号
  10. generate y = _n
  11. // 内存数据转硬盘
  12. save mydata.dta, replace
复制代码
/*使用和列示数据集*/
  1. use mydata, clear // 将上述数据载入内存
  2. list
复制代码
/*Rename*/

rename.JPG


/*Replace*/
  1. use mydata, clear
  2. replace x = 2
  3. // 将所有x值变为2
  4. //在含in和if的语句中较常出现
  5. replace x = 3 in 1/3
  6. browse
  7. replace y = 9 if y == 5
  8. browse
复制代码
  1. // 在条件语句中指定其它变量
  2. replace x = -99 if y < 3
  3. // 假定x=-99和y=9的数据为缺失值
  4. replace x = . if x == -99
  5. replace y = . if y == 9
  6. save mydata2, replace
复制代码
/*查看 mydata2.dta*/
  1. use mydata2, clear
  2. list in 1/5
复制代码
/*随机数的生成*/
  1. clear all
  2. set obs 50
  3. set seed 12345  
  4. generate x = runiform()
  5. generate y = runiform()
  6. twoway scatter x y
  7. graph export random.png, width(400) height(300) replace
复制代码

Graph.png

//set seed 保证每次呈现结果相同
/*缺失值*/
  1. use mydata2, clear
  2. list
复制代码
/*将数据在某临界值处切分*/
以Y=2.5处为例,小于2.5记为0,大于2.5为1
//不太正确的做法
  1. use mydata2, clear
  2. generate high_y = 0
  3. replace high_y = 1 if 2.5 < y
  4. list
复制代码

4.PNG


//正确做法:
  1. generate high_y2 = 0 if !missing(y)
  2. replace high_y2 = 1 if 2.5 < y & !missing(y)
  3. save mydata3, replace
复制代码

5.PNG


  1. //比较
  2. use mydata3, clear
  3. list y high_y high_y2
复制代码

6.PNG


/*录入与保存*/
  1. clear all
  2. input id str10 name yob
  3. 1 "Amy" 1990
  4. 2 "Bill" 1991
  5. 3 "Cathy" 1989
  6. end
  7. rename yob year_of_birth
  8. save birth, replace
复制代码

数据保存.png

/*调用*/
  1. use birth, clear
  2. assert _N == 3
  3. list, abbreviate(15)
复制代码

7.PNG

/*添加标签*/
  1. use birth.dta, clear
  2. generate gender = 1 if name == "Amy" | name == "Cathy"
  3. replace gender = 2 if name == "Bill"
  4. tabulate gender
  5. save birth2, replace
复制代码
/*两步给变量值加标签*/
  1. use birth2, clear
  2. // 1. 定义变量值标签
  3. label define gender 1 "girl" 2 "boy"
  4. // 2.为每个变量值加标签
  5. label values gender gender
  6. save birth3, replace
复制代码
/*检查添加标签正确与否*/

  1. use birth3, clear
  2. tabulate gender
复制代码

1.PNG


/*给变量添加标签*/

  1. use birth3, clear
  2. // labeling a variable is simpler
  3. label var gender "Gender of the respondent"
  4. describe gender
复制代码
*从csv与*xls文件导入数据:

csv_xls.png

方法一:菜单操作

*.xls/*.xlsx:File--->Import----->EXCEL spreadsheet(*.xls/*.xlsx)

*.csv:         File--->Import----->Text data(delimited,*.csv,...)


方法二:直接复制(command窗口输入edit打开DataEditor),从Excel中复制然后在DataEditor中右键粘贴即可

copy.png


方法三:
*.xls/xlsx: import excel
  1. copy "http://www.princeton.edu/~otorres/Stata/Students.xls " "Students.xls" ,replace
  2. import excel "Students.xls", sheet("Full") cellrange("A1:N20") firstrow clear
  3. browse
复制代码
sheet(工作表名) cellrange(范围) firstrow 第一行为变量
  1. /*显示自带及部分下载数据集*/
  2. sysuse dir,all
复制代码

10.png



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:数据管理 Spreadsheet Respondent University Management University 文件夹

已有 1 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
xddlovejiao1314 + 100 + 100 + 5 + 5 + 5 精彩帖子

总评分: 经验 + 100  论坛币 + 100  学术水平 + 5  热心指数 + 5  信用等级 + 5   查看全部评分

本帖被以下文库推荐

沙发
wfh仰望星空 发表于 2015-7-15 13:07:44
好贴!
已有 1 人评分经验 论坛币 收起 理由
xddlovejiao1314 + 10 + 3 鼓励积极发帖讨论

总评分: 经验 + 10  论坛币 + 3   查看全部评分

藤椅
tkt718 发表于 2015-9-5 00:33:26 来自手机
niuniuyiwan 发表于 2015-7-11 22:45
【stata代码模板】变量方差的检验_sdtest转自www.jiayounet.com感谢数说工作室
(1)      单变量方差的检 ...
新手学习中,仔细领悟
已有 2 人评分经验 论坛币 收起 理由
xddlovejiao1314 + 10 + 3 鼓励积极发帖讨论
niuniuyiwan + 5 鼓励积极发帖讨论

总评分: 经验 + 10  论坛币 + 8   查看全部评分

板凳
niuniuyiwan 在职认证  发表于 2015-9-23 20:22:53
  1. /*auto.dta中的一些变量*/
  2. sysuse auto, clear
  3. describe make price mpg foreign
复制代码

已有 1 人评分经验 论坛币 收起 理由
xddlovejiao1314 + 10 + 3 鼓励积极发帖讨论

总评分: 经验 + 10  论坛币 + 3   查看全部评分

报纸
niuniuyiwan 在职认证  发表于 2015-9-24 09:04:42
  1. /*tabulate(含标签)*/
  2. sysuse auto, clear
  3. tabulate foreign
  4. /*tabulate(不含标签)*/
  5. sysuse auto, clear
  6. tabulate foreign, nolabel
复制代码

1.PNG



2.PNG


已有 1 人评分经验 论坛币 收起 理由
xddlovejiao1314 + 10 + 3 鼓励积极发帖讨论

总评分: 经验 + 10  论坛币 + 3   查看全部评分

地板
niuniuyiwan 在职认证  发表于 2015-9-24 09:06:31
  1. /*summarize*/
  2. sysuse auto, clear
  3. summarize price mpg
复制代码

1.PNG



已有 1 人评分经验 论坛币 收起 理由
xddlovejiao1314 + 10 + 3 鼓励积极发帖讨论

总评分: 经验 + 10  论坛币 + 3   查看全部评分

7
niuniuyiwan 在职认证  发表于 2015-9-29 12:02:39
Random Data

1000次骰子:
  1. clear
  2. set obs 1000
  3. generate roll = ceil(6 * runiform())
  4. tabulate roll
复制代码

1.PNG





8
niuniuyiwan 在职认证  发表于 2015-9-29 12:54:50
Random Data

runiform( )函数所返回的是[0,1)之间的数值,
如果要生成[a,b)之间的随机数:
  1. a+(b-a)*runiform( )
复制代码
特殊地,如果是[0,b)
  1. b*runiform( )
复制代码
如果是[a,b]
  1. a+int((b-a+1)*runiform())
复制代码
如果只需要[a,b]之间的整数:
  1. ceil((b-a)*runiform())
复制代码



9
niuniuyiwan 在职认证  发表于 2015-9-30 22:30:26
  1. //同时掷2个骰子1000次的随机数模拟
  2. clear
  3. set obs 1000
  4. generate dice = ceil(6 * runiform()) + ceil(6 * runiform())
  5. tabulate dice
复制代码

1.PNG



10
niuniuyiwan 在职认证  发表于 2015-9-30 22:36:57
  1. // rnormal()函数:产生服从正态分布的随机数,可自定义均值、方差
  2. clear
  3. set obs 2000
  4. generate z = rnormal()
  5. generate u = rnormal(500,75)
复制代码

2.PNG



您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2025-12-31 02:56