楼主: niuniuyiwan
3798 1

[Stata] Stata基础操作:数据管理(四) [推广有奖]

  • 7关注
  • 91粉丝

VIP

已卖:1980份资源

学科带头人

91%

还不是VIP/贵宾

-

威望
0
论坛币
14446 个
通用积分
1962.3850
学术水平
1119 点
热心指数
1167 点
信用等级
1061 点
经验
8523 点
帖子
1629
精华
1
在线时间
2492 小时
注册时间
2010-10-10
最后登录
2025-12-19

楼主
niuniuyiwan 在职认证  发表于 2015-6-28 19:40:15 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币

Stata基础操作:数据管理(四)

Stata WorkShop2:Data Management

Chang Y. Chung

Princeton University

  1. ----------------------------------------------------------------------------------------        
  2. // 字符型变量的编码
  3.    clear
  4.    
  5.    // 新建5个观测值
  6.    set obs 5
  7.    list
  8.    
  9.    // 新建字符型变量gender
  10.    generate str4 gender = "Male" in 1/3
  11.    replace gender = "Female" if _n >= 4
  12.    /*
  13.    产生新变量往往使用:gen/replace组合
  14.    | -----------  | --------- |
  15.    | generate     | replace   |
  16.    | ------------ | --------- |
  17.    | create       | modify    |
  18.    */
  19.    // 列示
  20.    list
  21.    //str---->num
  22.    // 手动方式(即不使用encode):以生成female变量的方式对原有字符型变量编码
  23.    gen female = 1 if gender == "Female"   // 以"=="代表等于,而不是=
  24.    replace female = 0 if gender == "Male"
  25.    
  26.    // 定义变量值标签femaleLabel
  27.    label define femaleLabel 1 "female" 0 "male"
  28.    // 使female变量值按照自定义的标签指定
  29.    label values female femaleLabel
  30.    
  31.    // 查验 -- 两个变量看似相同
  32.    list gender female
  33.    // 虽然二者显示的均为字符,但后者实际为数值型变量,摘去标签:
  34.    list gender female, nolabel
  35.    
  36.    
  37.    // 新建字符型变量income
  38.    set seed 123456 // 在伪随机数生成时预先设定种子值,以使结果复现
  39.    gen str4 income = cond(runiform() < 0.5, "high", "low")
  40.    // 查看
  41.    list income
  42.    
  43.    // 新建数值型变量inc, high为1,low为2
  44.    encode(income), gen(inc)
  45.    // 查验比较
  46.    list income inc
  47.    // 虽然看似相同,但转码后inc为数值型
  48.    label list inc
  49.    des inc income
  50.    list income inc, nolabel
  51. /*
  52. 注:encode命令主要适用于全字母组成的字符型变量,对包含数字组成的字符型
  53. 变量(如身份证号码或错误录入变量类型等)不宜使用encode命令,因为在转化
  54. 数值型变量的同时,会自动对应字符内容的不同而生成一个变量值标签,这时
  55. 可以考虑使用destring
  56. */
  57. 附加encode的一个例子:
  58. -------------------------------------
  59. *Roberto Ferrer Mar 29 '14 at 22:33
  60. clear all
  61. set more off

  62. * example database
  63. sysuse auto
  64. keep make

  65. clonevar make2 = make

  66. describe
  67. list in 1/5, nolabel

  68. * what you want
  69. foreach v of varlist make* {
  70.     encode `v', gen(new`v')
  71.     drop `v'
  72.     rename new`v' `v'
  73. }

  74. describe
  75. list in 1/5, nolabel
  76. -------------------------------------



  77. // 日期变量的编码
  78.    clear
  79.    // 新建变量birthday
  80.    set obs 9
  81.    gen birthday = .
  82.    local n = 1
  83.    foreach val in -2 -1 0 1 2 3 19023 19030 19031 {
  84.       replace birthday = `val' in `n++'
  85.    }
  86. /*
  87. foreach的常见类型之一:
  88. foreach lname in list {
  89. 指向lname的语句...
  90. }
  91. lname局部宏的名称,这时list为一般数组,
  92. foreach反复执行括弧里面的内容,上例中将val数组中的
  93. 第一个、第二个...数依次填入birthday的9个缺失值
  94. */

  95.    // 查看
  96.    list, clean
  97. /*clean:无表格边框*/
  98. // 仅为一个数值变量
  99.    
  100.    // 追加一般化格式  %td
  101.    format birthday %td
  102.    // 成为日期型变量
  103.    list birthday, clean
  104.    
  105.    // 改应其他格式:
  106.    format birthday %tdNN-DD-CCYY
  107.    list birthday, clean
  108.    
  109.    //  可观察到:最后面feb. 8, 2012 与前两种显示格式不同
  110.    display %7.0g birthday[_N] " " %tdnn/dd/yy birthday[_N] "   " %tdDD-mon-CCYY birthday[_N]
  111.    

  112. // 日期型变量由数字构成,具有数值型变量的一些特征:如可计算
  113.    // 正序排列
  114.    sort birthday
  115.    
  116.    // 逆序排列
  117.    gsort -birthday
  118.    list, clean
  119.    
  120.    // Stata实际上是以数字来记录日期,即距离1960年1月1日多少天
  121.    gen numericValue = birthday
  122.    list birthday numericValue, clean
  123.    
  124.    // 2天后
  125.    di %td td(08feb2012) + 2
  126.    
  127.    // 抽取年/月/日为单独变量
  128.    gen month = month(birthday)
  129.    gen day = day(birthday)
  130.    gen year = year(birthday)
  131.    gen dow = dow(birthday)

  132. /*
  133. |-------------------|-----------------------------------------------|--------------------|
  134. |  If your data are |              Instead of ym() use              | Instead of %tm use |
  135. |-------------------|-----------------------------------------------|--------------------|
  136. | Yearly            | y(year)                                       | %ty                |
  137. | Half-yearly       | yh(year, halfyear)                            | %th                |
  138. | Quarterly         | yq(year, quarter)                             | %tq                |
  139. | Monthly           | ym(year, month)                               | %tm                |
  140. | Weekly            | yw(year, week)                                | %tw                |
  141. | Daily             | mdy(month, day, year)                         | %td                |
  142. | In Milliseconds * | mdyhms(month, day, year, hour,minute, second) | %tc                |
  143. |-------------------|-----------------------------------------------|--------------------|
  144. */
  145.    // 为一周内每一天添加标签,即按照变量值标签2步法
  146.    lab def dow 0 "Sun" 1 "Mon" 2 "Tue" 3 "Wed" 4 "Thu" 5 "Fri" 6 "Sat"
  147.    lab values dow dow // 相同的标签与变量名之间不影响
  148.    list birthday dow month day year, clean
  149.    
  150.    //mdy()函数的返回值是与1960/01/01之间的天数,添加格式符以完整显示
  151.    di %tdnn/dd/ccyy mdy(2, 8, 2012)
  152.    /*numeric month (nn), the day (dd),
  153.    and two-digit year (yy)two-digit century(cc)*/
  154. // 日期型变量数据加工实例:
  155.    
  156.    // Yuna Kim生日: Sep. 5, 1990
  157.    //使用date()函数读入原始字符串数据,并将年/月/日顺序排列好
  158.    di "today is " date("02/08/2012", "MDY")
  159.    // td()实际为伪函数,返回距离1960/1/1的天数,实际上该函数编程应用不多,往往作计算用
  160.    di "Yuna's birthday is " td(5sep1990)
  161.    //日期型变量可以如数值型变量一样进行计算
  162.    di "Yuna's age today (in days) is " 19031 - 11205
  163.    di "  Which is approx. (in years) " 7826 / 365.25
  164.    
  165.    // 月计划
  166.    // 第一天
  167.    di "day 1: " string(19031 + 1, "%td")
  168.    // 第一天
  169.    di "day 2: " string(19031 + 2, "%td")
  170.    // 第一天
  171.    di "day 3: " string(19031 + 3, "%td")
  172.    // 本月末:
  173.    di "day 30: " string(19031 + 30, "%td")


  174.    // 日期型转化为字符型变量 :string
  175.    gen strBirthday = string(birthday, "%tdnn/dd/ccyy")
  176.    //查看
  177.    des strBirthday // 是否字符型
  178.    format strBirthday %-10s // 添加负号:左对齐格式
  179.    list strBirthday  
  180. ------------------------------------------------------------------------------------
复制代码

二维码

扫码加我 拉你入群

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

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

关键词:Stata基础 Stata 基础操作 tata 数据管理 University generate replace 新建

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

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

本帖被以下文库推荐

沙发
xddlovejiao1314 学生认证  发表于 2015-6-28 22:21:25
谢谢分享,多多分享好贴。

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

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