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

One variable in kg and grams. another indicates which unit; how can I get new variable in kg?

在 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 上没有任何缺失值,但想象它们可能会发生也无妨。

通过解释的方式提供评论对于第三方来说可能介于多余和必要之间。