【stata】变量处理、虚拟变量生成和样本分组的常见操作

您所在的位置:网站首页 stata如何将第一行作为variable 【stata】变量处理、虚拟变量生成和样本分组的常见操作

【stata】变量处理、虚拟变量生成和样本分组的常见操作

2023-11-14 04:56| 来源: 网络整理| 查看: 265

0. 变量导入

此处以美国1988年妇女工资(官方数据)为例进行演示,数据导入代码为:

* - 数据清除 - clear all // 清除所有 cls // 清除屏幕 * - 数据导入 - sysuse nlsw88.dta, clear //导入美国1988年妇女工资数据 1. 变量生成

可以采用generate生成新的变量,并可以和if等条件语句自由组合。

gen 新变量 = 生成方式 if 条件 generate L_wage = log(wage) if married == 1 // 数据的对数处理【常用】 label var L_wage "log hourly wage" // 注意引号 常见的取整方式:四舍五入取整(round)、向上取整(ceil)、向下取整(floor) generate round_wage = round(wage) // 四舍五入取整 note: "ceil 向上取整;floor 向下取整" gsort idcode, gen(numb) // 产生编号 list *wage if married == 1 in 1/10 // *wage *任意长度的任意量 变量编号和群体数量统计

可以利用stata本身自带的_n和_N变量,达到对群体进行标号,或是统计群体样本数的目的。

_n:即每个样本对应的编号_N:即所选样本的总数 bysort married: gen married_id = _n // 分群体编号 bysort married: gen married_num = _N // 统计每个群体的样本数 2. 变量改名

对已经存在的变量,可以采用rename命令对变量名进行修改。

变量重命名:rename 现有变量 新的名字 rename wage WAGE // 将变量wage命名为WAGE rename race RACE // 将变量race命名为RACE

需要注意的是,这里的需要和标签名进行区别,新的名字不能加引号(""),不然会产生报错

变量批量改名:renvars 现有变量1 现有变量2 / 新的名字1 新的名字2 renvars WAGE RACE / wage race // 将变量名改回去 renvars wage race, postfix(_new) // 批量增加后缀 rename (wage_new race_new) (wage race) // 批量改名2:某些版本可用

需要说明的是renvars 为外部命令,需要进行安装,具体安装方式为

1. stata在命令窗口输入:search renvars 2. 点击第一个链接:dm88_1... 3. 点击install 3. 变量改值

有些时候我们还需要对变量的某些值进行修改,可以使用replace实现

变量值替换:replace 变量名 = 新值 if 变量名 = 原始值 sum wage replace wage = 10 if wage > 10 // 将大于10的值都替换为10 sum wage 虚拟变量生成:generate和replace混用 gen byte Old = 0 // 年龄是否大于40 replace Old = 1 if age > 40 // 如果大于替换为1 ['.'在stata里会被认为无穷大,被替换为1] // replace Old = . if age = . // 替换缺省值 // 定义标签 -- 可见上一稿 label define label_Old 1 "是" 0 "否" label values Old label_Old 4. 变量删除

可以使用dorp对变量和样本进行删除。

删除样本:drop if 条件 drop if tenure == . // 删除tenure缺失的样本 删除变量:drop 变量名 drop tenure // 删除tenure这个变量 cap drop L_wage Old // 删除变量且没有变量不进行报错 // cap: 执行命令,并吞掉报错,后边会有妙用,有机会的话谈谈 5. 克隆拆分

可以使用clonevar对变量进行克隆,使用separate进行变量的拆分

变量克隆:clone 新变量 = 原始变量 clonevar married_c = married // 复制值和标签 generate married_g = married // 复制值

克隆变量和直接生成新变量的区别在于,值标签会不会被复制,亲自运行一下即可知道

变量拆分:sparate 拆分变量, by(拆分标准) separate wage, by(married) // 把变量按married拆分 6. 虚拟变量生成

可以通过tab和xi两种方式,构造离散变量所对应的虚拟变量。

总共生成n个虚拟变量:``tab 变量名, gen(虚拟变量名)`总共生成n-1个虚拟变量:``xi i.变量名` tab race, gen(dum_race) // 生成n个种族虚拟变量 xi i.race // 生成 n-1个 虚拟变量(避免完全共线) xi i.race, prefix(pr_) // 增加前缀(避免覆盖)

通常使用xi i.变量名的方式进行生成,一是比较简洁;二是可以避免完全共线的情况。

7. 样本分组 等分分组:先排序sort再分组group sort wage // 变量排序【注意】 gen g_wage = group(5) // 变量分组 tab g_wage 断点分组:利用recode进行分组或irecode recode age (min/39 = 1) (39/42 = 2) (42/max = 3), gen(g_age_1) // 分组边界 顺序优先 gen g_age_2 = irecode(age, 39, 42) // 从0编号 gen g_age_3 = recode(age, 39, 42) // 边界编号 list age g_age* in 1/10

最常用的是第一种分组方式,如果觉得看备注不太好理解,将代码运行之后观察list清单即可理解

按条件进行分组:使用cond命令,缺陷在于只能构造0-1类型的变量 gen dum1 = cond(hours>40, 1, 0, .) // 大于40为1,反之为0 list hours dum1 label list occlbl gen dum_occu = inlist(occu, 1, 2, 7, 12) // 将occ = 1|2|7|12 定义为1 list occu dum_occu in 1/10


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3