楼主: niuniuyiwan
10350 2

[Stata] Stata 基础操作:数据管理(五)sort/gsort/fillin [推广有奖]

  • 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-8-2 18:06:23 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
  1. // Stata By-group Processing. In-depth Topic of Stata Workshop 2 (Data Management)
  2. // by Chang Y. Chung on 2014-09-16

  3. //clist与list....,clean用法类似,但从stata12起不再更新
  4. sysuse auto
  5. list make price mpg gear_ratio foreign, nolabel clean
  6. clist make price mpg gear_ratio foreign, nolabel

  7. // 数据集(矩阵形式)
  8.    // 新建一个简单的数据集
  9.    clear
  10.    input x y
  11.    1 2
  12.    1 3
  13.    1 4
  14.    end
  15.    
  16.    // 修改变量值
  17.    replace x = 2 * y
  18.    list
  19.    
  20.    //还可通过循环语句对每个观测值加以修改
  21.    gen x2 = .
  22.    local N = _N
  23.    forval obs = 1/`N' {
  24.       replace x2 = 2 * y[`obs'] if `obs' == _n   
  25.    }
  26.    list x x2
  27.    
  28.    // _N表示最后一个观测值的位置序号,即观测值总数
  29.    // _n表示每个观测值的序号
  30.    gen bigN = _N
  31.    gen smallN = _n
  32.    list *N
  33.    
  34. // 所有数据先导入内存
  35.    // 调用数据
  36.    sysuse auto, clear
  37.    // make第二个变量值
  38.    di make[2]
  39.    // make最后一个变量值
  40.    di make[_N]
  41.    
  42.    // _n表示每个观测值的序号,例如:price[_n] 在多数情况下与price无异
  43.    gen priceSq1 = price * price
  44.    gen priceSq2 = price[_n] * price[_n]
  45.    assert priceSq1 == priceSq2  // 使用assert加以判断语句正确性,没有返回内容说明二者相等
  46.    
  47.    // lag and lead: 滞后与提前
  48.    //保留前5个观测值
  49.    keep if _n <= 5
  50.    sort make
  51.    list make price
  52.    
  53.    // lagPrice——新建变量,意为price的滞后一期
  54.    gen lagPrice = price[_n-1]
  55.    list make price lagPrice
  56.    //由于price格式为%8.0gc,所以调整lagPrice格式
  57.    format lagPrice %8.0gc
  58.    list make price lagPrice
  59.    // 滞后多期
  60.    gen lag2Price = price[_n-2]
  61.    format lag2Price %8.0gc
  62.    list make price lag2Price
  63.    // 先前一期
  64.    gen leadPrice = price[_n+1]
  65.    format leadPrice %8.0gc
  66.    list make price leadPrice
  67.    
  68.    // 时间序列中:以tsset 后设定(L., L2., ...)(F.,F2.,...)(D.,D2.,....)(S4.,S8.,....)
  69.    // 替换上述复杂手动方式: help tsset
  70.    
  71. // 变量排序
  72.    sysuse auto, clear
  73.    // 现有序列:
  74.    des
  75.    // make mpg headroom weight ... price
  76.    // 将前三个变量改为:mpg make and price
  77.    order mpg make price, first // first选项(默认) 可以不附加
  78.    des
  79.    // last选项,排为最后三个
  80.    order mpg make price, last // last将变量移动最后端
  81.    des
  82.    
  83.    // 将某些变量排位于指定变量前:
  84.    order mpg make price, before(trunk)
  85.    des
  86.    
  87.    // 指定位置后插入 即trunk后
  88.    order mpg make price, after(trunk)
  89.    des
  90.    
  91. // 变量值排序
  92.    // 对于字符变量,在Stata中空字符串最小,会被排在最前
  93.    replace make = trim("") in 3/5
  94.    // 第3-5个变量值替换为空字符串,这与删除变量值中空格 ("  ")不同
  95.    // 此处也是产生空字符串的技巧之一
  96.    list make price in 1/10
  97.    // sort:升序排列,stable选项:以当前选定区域排序,其他变量按照原来顺序排列
  98.    sort make, stable
  99.    // 空字符串如前述排在最前
  100.    list make price in 1/10
  101.   
  102.    // gsort:降序排列
  103.    gsort -make
  104.    list make price in 1/10

  105.    // 对于数值型变量,缺失值最大,会被排在最后
  106.    //除了".",Stata中实际上有26种缺失值,即".a "  ".b " ...  ".z",他们之间及非缺失值的顺序:
  107.    //  非缺失值< . < .a < .b < ... < .z
  108.    replace price = . in 5
  109.    replace price = .d in 6
  110.    sort price, stable
  111.    list make price in -6/L
  112.    
  113.    //对选定多变量排序,其余变量维持不变,实际这两个变量应存在对应关系:如foreign与make
  114.    sort foreign make, stable
  115.    by foreign: list foreign make if _n <=5
  116.    
  117.    
  118. // 组合分析
  119. /*
  120.   通过对类别变量categorical variables的分层处理来校验连续性变量continuous variables的取值概况
  121. */
  122.    // 查验foreign中的层别概况
  123.    tab foreign, nolabel missing
  124.    // 如果分类变量取值较多,添加by选项对类别逐一分析,但处理前需要排序:
  125.    sysuse auto
  126.    sort foreign, stable
  127.    by foreign: summarize price // 2次描述性统计,形成foreign与price(分类*连续变量组合分析)
  128.    
  129.    //上述两步可合为一步:
  130.    bysort foreign: summarize price
  131.    // 或:
  132.    by foreign, sort: summarize price
  133.    
  134.    // 如果附加(),那么实际上只是被排序,而没有形成连续型+类别型变量组合
  135.    bysort foreign (make): summarize price //  仅2次描述性统计
  136.    
  137.    //系统变量: _n 和 _N在连续型+类别型变量组合内会依据类别重置,注意Domestic和foreign的_N _n
  138.    sort foreign make, stable
  139.    by foreign (make): gen bigN = _N
  140.    by foreign (make): gen smallN = _n
  141.    list make foreign *N
复制代码
by是很多命令的前缀。[by varlist:]表示对varlist(分类变量)中的每一类分别执行命令。

fillin——填充缺失值

  1. webuse fillin1

  2. list

  3. fillin sex race age_group

  4. list
复制代码

1.PNG


2.PNG




二维码

扫码加我 拉你入群

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

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

关键词:Stata 基础操作 数据管理 tata fill 校正

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

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

本帖被以下文库推荐

沙发
xddlovejiao1314 学生认证  发表于 2015-8-2 20:27:40
好贴,谢谢分享。
已有 1 人评分论坛币 收起 理由
niuniuyiwan + 10 热心帮助其他会员

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

藤椅
赵安豆 发表于 2025-1-12 13:01:29
在Stata中进行数据管理时,`sort`, `gsort`, 和 `fillin` 命令是非常重要的工具,用于对数据集排序和填充缺失值。

### sort

`sort` 命令可以按照一个或多个变量的顺序重新排列观测值。例如:

```stata
sysuse auto, clear
sort price
```

这将根据`price`变量按升序(默认)对汽车数据进行排序。

如果要降序排序,可以在变量名后添加空格和`d`字符:

```stata
sort price d
```

或者使用`desc`关键字:

```stata
sort price desc
```

### gsort

在需要根据多个变量进行排序或在有重复值的情况下进行特定的排序时,`gsort` 非常有用。例如,先按国家分组再按收入排序:

```stata
sysuse grunfeld, clear
gsort - invest t
```

这会按照`invest`降序和`t`升序对数据进行排序。

### fillin

`fillin` 命令用于填充缺失值。通常,在使用`sort`或`gsort`后,可以利用相邻观测值的模式来推测缺失值。例如:

```stata
sysuse auto, clear
replace price = . if foreign == 1 // 假设我们要删除所有外国汽车的价格信息
sort make
fillin make price
```

这会尝试根据制造商标识(`make`)填充价格数据中的缺失值。

在进行排序和填充操作时,确保理解命令的逻辑和效果,以免错误地修改数据。这些命令是处理大型数据集、准备数据分析或报告时的重要工具。
### 示例

以你提到的简单数据集为例:

```stata
clear
input x y
1 2
1 3
1 4
end
```

如果你想将`x`变量更改为`y`的两倍,你可以直接使用`replace`命令:

```stata
replace x = 2 * y
```
或者通过循环语句逐个修改每个观测值。虽然Stata不支持传统的for循环语法(如其他编程语言中常见的),但可以使用宏和`forval`结构来实现类似的功能,如你所展示的代码片段所示:

```stata
gen x2 = .
local N = _N
forval obs = 1/`N' {
   replace x2 = 2 * y[`obs']
}
```

在这个循环中,首先生成一个全为缺失值的新变量`x2`。然后,宏处理器通过`forval`命令遍历数据集中的每个观测值,并使用`replace`命令逐个计算并更新`x2`的值。

以上就是关于Stata中数据管理基础操作——排序和填充的一些基本概念和应用实例。
```

此文本由CAIE学术大模型生成,添加下方二维码,优先体验功能试用



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

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2026-1-2 04:11