gpt4 book ai didi

Stata:计数时忽略缺失值

转载 作者:行者123 更新时间:2023-12-01 12:45:19 25 4
gpt4 key购买 nike

我想创建一个变量 (counter),它计算每年另一个变量 (firmage0) 的非缺失值。我的代码如下所示:

sort year  
quietly by year: gen counter = _n if firmage0 != .

不幸的是,即使有缺失值,Stata 也会从 1 开始计数。但我想在有非缺失值时开始计数。此外,第二个非缺失值应为“2”,第三个为“3”,依此类推。有一个重要的限制。不要使用保留恢复!创建变量 counter 后,我的数据集如下所示(这只是其中的一小部分)。可用空间意味着缺失值!

year    firmage0    counter
1975
1975
1975
1975
1975 21 5
1975
1975 60 7
1975
1975
1975
1975
1975
1975
1975
1975
1975
1975
1975
1975
1975 115 20
1975
1975
1975

但是数据集应该是这样的:

year    firmage0    counter
1975
1975
1975
1975
1975 21 1
1975
1975 60 2
1975
1975
1975
1975
1975
1975
1975
1975
1975
1975
1975
1975
1975 115 3
1975
1975
1975

最佳答案

系统变量_n固定的,因为它表示独立于您的 if 的当前观察次数。健康)状况。您要求的代码是 counter 如果它没有丢失,它的值就是观察值。这与特定点之前的非缺失观察计数不同,这是您真正想要的。

请注意您的缺失的数据类型。当你展示它时,firmage0看起来像一个字符串变量,因为空格是字符串的缺失。缺失的数值是表示为 . (或 .<something> )。参见 help missings .

一个解决方案是累积 summissings 为条件.我假设变量类型是数字:

clear all
set more off

input year firmage0
1975 .
1975 .
1975 .
1975 .
1975 21
1980 60
1980 .
1980 89
1985 .
1985 .
1985 23
1985 45
1985 47
1985 .
end

list, sepby(year)

bysort year: gen counter = sum(!missing(firmage0))
replace counter = . if missing(firmage0) // optional

list, sepby(year)

!missing(firmage0)根据对 firmage0 的观察结果,计算结果为假 (0) 或真 (1)分别丢失或不丢失。那么sum对其求和。

如果变量实际上是字符串类型,则将相应行替换为:

replace counter = "" if missing(firmage0) // optional

单行(数字类型)是:

bysort year: gen counter = cond(missing(firmage0), ., sum(!missing(firmage0)))

但我更喜欢第一种方式,因为它更容易阅读。

关于Stata:计数时忽略缺失值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20606573/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com