一个以千克和克为单位的变量。另一个指示哪个单位;我怎样才能得到以公斤为单位的新变量?
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
上没有任何缺失值,但想象它们可能会发生也无妨。
通过解释的方式提供评论对于第三方来说可能介于多余和必要之间。
在 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
上没有任何缺失值,但想象它们可能会发生也无妨。
通过解释的方式提供评论对于第三方来说可能介于多余和必要之间。