微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

以公斤和克为单位的一个变量另一个表示哪个单位;我怎样才能获得以公斤为单位的新变量?

如何解决以公斤和克为单位的一个变量另一个表示哪个单位;我怎样才能获得以公斤为单位的新变量?

在 Stata 中,quantity 有以千克和克为单位的输入。 unit =1 表示公斤,unit=2 表示克。我如何generate一个新变量quantity_kg将所有克值转换为公斤?

My existing dataset-

clear
input double(hhid quantity unit unit_price)
  1   24 1   .
  1    4 1   .
  1  350 2  50
  1  550 2  90
  1    2 1  65
  1  3.5 1  85
  1    1 1  20
  1    4 1  25
  1    2 1   .
  2    1 1  30
  2    2 1  15
  2    1 1  20
  2  250 2  10
  2    2 1  20
  2  400 2  10
  2  100 2  60
  2    1 1  20

我期望的数据集

input double(hhid quantity unit unit_price quantity_kg)
  1   24 1   .  24
  1    4 1   .  4
  1  350 2  50 .35
  1  550 2  90 .55
  1    2 1  65  2
  1  3.5 1  85  3.5
  1    1 1  20  1
  1    4 1  25  4
  1    2 1   .  2
  2    1 1  30  1
  2    2 1  15  2
  2    1 1  20  1
  2  250 2  10 .25
  2    2 1  20  2
  2  400 2  10 .40
  2  100 2  60 .10
  2    1 1  20 1

解决方法

下面的代码可以满足您的需求。

这看起来像是家庭数据,通常需要进行大量单位转换。它们也是一个常见的错误来源,因此我包含了在本地定义转换率和单位代码的最佳实践。如果您在一个地方定义它,那么您可以在转换单位的多个地方重复使用这些局部变量。很容易在带有 replace 的行中发现拼写错误,因为您会注意到,如果一行写着 kilo_rate 而后写着 gram_unit。在这个简单的例子中,它可能有点矫枉过正,但如果你有很多单位和费率,那么这是一种避免错误的巧妙方法。

clear
input double(hhid quantity unit unit_price)
  1   24 1   .
  1    4 1   .
  1  350 2  50
  1  550 2  90
  1    2 1  65
  1  3.5 1  85
  1    1 1  20
  1    4 1  25
  1    2 1   .
  2    1 1  30
  2    2 1  15
  2    1 1  20
  2  250 2  10
  2    2 1  20
  2  400 2  10
  2  100 2  60
  2    1 1  20
 end

*Define conversion rates and unit codes
local kilo_rate = 1
local kilo_unit = 1
local gram_rate = 0.001
local gram_unit = 2

*Create the standardized variable
gen     quantity_kg = .
replace quantity_kg = quantity * `kilo_rate' if unit == `kilo_unit'
replace quantity_kg = quantity * `gram_rate' if unit == `gram_unit'
,
// unit 1 means kg,unit 2 means g,and 1000 g = 1 kg
generate quantity_kg = cond(unit == 1,quantity,cond(unit == 2,quantity/1000,.)) 

您的示例在 unit 上没有任何缺失值,但想象它们可能发生也无妨。

以解释的方式提供评论对于第三方来说可能是多余的,也可能是必不可少的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。