- 阅读权限
- 255
- 威望
- 0 级
- 论坛币
- 14446 个
- 通用积分
- 1962.3850
- 学术水平
- 1119 点
- 热心指数
- 1167 点
- 信用等级
- 1061 点
- 经验
- 8523 点
- 帖子
- 1629
- 精华
- 1
- 在线时间
- 2492 小时
- 注册时间
- 2010-10-10
- 最后登录
- 2025-12-19
已卖:1980份资源
学科带头人
还不是VIP/贵宾
- 威望
- 0 级
- 论坛币
 - 14446 个
- 通用积分
- 1962.3850
- 学术水平
- 1119 点
- 热心指数
- 1167 点
- 信用等级
- 1061 点
- 经验
- 8523 点
- 帖子
- 1629
- 精华
- 1
- 在线时间
- 2492 小时
- 注册时间
- 2010-10-10
- 最后登录
- 2025-12-19
 | 开心 2025-9-24 13:52:14 |
|---|
签到天数: 344 天 连续签到: 1 天 [LV.8]以坛为家I
|
经管之家送您一份
应届毕业生专属福利!
求职就业群
感谢您参与论坛问题回答
经管之家送您两个论坛币!
+2 论坛币
Stata基础操作:数据管理(四) Stata WorkShop2:Data Management Chang Y. Chung Princeton University | - ----------------------------------------------------------------------------------------
- // 字符型变量的编码
- clear
-
- // 新建5个观测值
- set obs 5
- list
-
- // 新建字符型变量gender
- generate str4 gender = "Male" in 1/3
- replace gender = "Female" if _n >= 4
- /*
- 产生新变量往往使用:gen/replace组合
- | ----------- | --------- |
- | generate | replace |
- | ------------ | --------- |
- | create | modify |
- */
- // 列示
- list
- //str---->num
- // 手动方式(即不使用encode):以生成female变量的方式对原有字符型变量编码
- gen female = 1 if gender == "Female" // 以"=="代表等于,而不是=
- replace female = 0 if gender == "Male"
-
- // 定义变量值标签femaleLabel
- label define femaleLabel 1 "female" 0 "male"
- // 使female变量值按照自定义的标签指定
- label values female femaleLabel
-
- // 查验 -- 两个变量看似相同
- list gender female
- // 虽然二者显示的均为字符,但后者实际为数值型变量,摘去标签:
- list gender female, nolabel
-
-
- // 新建字符型变量income
- set seed 123456 // 在伪随机数生成时预先设定种子值,以使结果复现
- gen str4 income = cond(runiform() < 0.5, "high", "low")
- // 查看
- list income
-
- // 新建数值型变量inc, high为1,low为2
- encode(income), gen(inc)
- // 查验比较
- list income inc
- // 虽然看似相同,但转码后inc为数值型
- label list inc
- des inc income
- list income inc, nolabel
- /*
- 注:encode命令主要适用于全字母组成的字符型变量,对包含数字组成的字符型
- 变量(如身份证号码或错误录入变量类型等)不宜使用encode命令,因为在转化
- 数值型变量的同时,会自动对应字符内容的不同而生成一个变量值标签,这时
- 可以考虑使用destring
- */
- 附加encode的一个例子:
- -------------------------------------
- *Roberto Ferrer Mar 29 '14 at 22:33
- clear all
- set more off
- * example database
- sysuse auto
- keep make
- clonevar make2 = make
- describe
- list in 1/5, nolabel
- * what you want
- foreach v of varlist make* {
- encode `v', gen(new`v')
- drop `v'
- rename new`v' `v'
- }
- describe
- list in 1/5, nolabel
- -------------------------------------
- // 日期变量的编码
- clear
- // 新建变量birthday
- set obs 9
- gen birthday = .
- local n = 1
- foreach val in -2 -1 0 1 2 3 19023 19030 19031 {
- replace birthday = `val' in `n++'
- }
- /*
- foreach的常见类型之一:
- foreach lname in list {
- 指向lname的语句...
- }
- lname局部宏的名称,这时list为一般数组,
- foreach反复执行括弧里面的内容,上例中将val数组中的
- 第一个、第二个...数依次填入birthday的9个缺失值
- */
- // 查看
- list, clean
- /*clean:无表格边框*/
- // 仅为一个数值变量
-
- // 追加一般化格式 %td
- format birthday %td
- // 成为日期型变量
- list birthday, clean
-
- // 改应其他格式:
- format birthday %tdNN-DD-CCYY
- list birthday, clean
-
- // 可观察到:最后面feb. 8, 2012 与前两种显示格式不同
- display %7.0g birthday[_N] " " %tdnn/dd/yy birthday[_N] " " %tdDD-mon-CCYY birthday[_N]
-
- // 日期型变量由数字构成,具有数值型变量的一些特征:如可计算
- // 正序排列
- sort birthday
-
- // 逆序排列
- gsort -birthday
- list, clean
-
- // Stata实际上是以数字来记录日期,即距离1960年1月1日多少天
- gen numericValue = birthday
- list birthday numericValue, clean
-
- // 2天后
- di %td td(08feb2012) + 2
-
- // 抽取年/月/日为单独变量
- gen month = month(birthday)
- gen day = day(birthday)
- gen year = year(birthday)
- gen dow = dow(birthday)
- /*
- |-------------------|-----------------------------------------------|--------------------|
- | If your data are | Instead of ym() use | Instead of %tm use |
- |-------------------|-----------------------------------------------|--------------------|
- | Yearly | y(year) | %ty |
- | Half-yearly | yh(year, halfyear) | %th |
- | Quarterly | yq(year, quarter) | %tq |
- | Monthly | ym(year, month) | %tm |
- | Weekly | yw(year, week) | %tw |
- | Daily | mdy(month, day, year) | %td |
- | In Milliseconds * | mdyhms(month, day, year, hour,minute, second) | %tc |
- |-------------------|-----------------------------------------------|--------------------|
- */
- // 为一周内每一天添加标签,即按照变量值标签2步法
- lab def dow 0 "Sun" 1 "Mon" 2 "Tue" 3 "Wed" 4 "Thu" 5 "Fri" 6 "Sat"
- lab values dow dow // 相同的标签与变量名之间不影响
- list birthday dow month day year, clean
-
- //mdy()函数的返回值是与1960/01/01之间的天数,添加格式符以完整显示
- di %tdnn/dd/ccyy mdy(2, 8, 2012)
- /*numeric month (nn), the day (dd),
- and two-digit year (yy)two-digit century(cc)*/
- // 日期型变量数据加工实例:
-
- // Yuna Kim生日: Sep. 5, 1990
- //使用date()函数读入原始字符串数据,并将年/月/日顺序排列好
- di "today is " date("02/08/2012", "MDY")
- // td()实际为伪函数,返回距离1960/1/1的天数,实际上该函数编程应用不多,往往作计算用
- di "Yuna's birthday is " td(5sep1990)
- //日期型变量可以如数值型变量一样进行计算
- di "Yuna's age today (in days) is " 19031 - 11205
- di " Which is approx. (in years) " 7826 / 365.25
-
- // 月计划
- // 第一天
- di "day 1: " string(19031 + 1, "%td")
- // 第一天
- di "day 2: " string(19031 + 2, "%td")
- // 第一天
- di "day 3: " string(19031 + 3, "%td")
- // 本月末:
- di "day 30: " string(19031 + 30, "%td")
- // 日期型转化为字符型变量 :string
- gen strBirthday = string(birthday, "%tdnn/dd/ccyy")
- //查看
- des strBirthday // 是否字符型
- format strBirthday %-10s // 添加负号:左对齐格式
- list strBirthday
- ------------------------------------------------------------------------------------
复制代码
| | |
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
|
|
-
总评分: 经验 + 100
论坛币 + 100
学术水平 + 5
热心指数 + 5
信用等级 + 5
查看全部评分
|