2016-08-18 79 views
1

我正在使用Stata。在两个合并期间为两个条件之一创建虚拟对象

我是从TUS(即时间使用调查)获得的描述性统计之后:为全职工作者工作的每日总时间(因为这些数据来自卢森堡,工作日至少8小时为全职工作者)。 因此,我研究了TUS的子样本,那里只有那些宣布被雇用的人。

在此数据集的子样本中,每人有两个观察值,一个在周末和一个在周(即它是一种短面板数据集)。

因为我感兴趣的只是那些谁全职工作的人,我想衡量在这两天的总工作时间两种类型的个体:

  1. 个人在本周谁的工作,为工作时间为一周工作时间为8小时以上,周末日工作时间为0(周六,周日);
  2. 本周和周末工作的个人(如服务员,护士,司机等),工作时间为一周工作时间为8小时以上,周末为8小时以上。

[问题1]如何可以创建一个变量为1时的各个或者是1或2,否则为0?

[问题2]一旦我创建了全职工人虚拟变量,我想创建另一个虚拟变量这对于谁在工作日的还谁的工作人员只工作和0工人是1周末,我怎么能这样做?

[更新] 这里我发表(含datasex)中获得的数据集作为例子的一部分:

clear 
input double(working_act1 working_act2 working_act3 working_act4) float weekend double id_ind 
0 0     0     0     0 1 4015801 
0 0     0 .3333333333333339 11.666666666666668 0 4017501 
0 0     0     0     0 1 4017501 
0 0     0 .16666666666666785     8 0 4017601 
0 0     0     0     0 1 4017601 
0 0     0     0 8.166666666666668 0 4017602 
0 0     0     0     0 1 4017602 
0 0     0     0 7.166666666666669 0 4017801 
0 0     0     0     0 1 4017801 
0 0 .16666666666666785     0 3.666666666666668 0 4017802 
0 0     0 .33333333333333215     7 1 4017802 
0 0     0     0 12.000000000000002 0 4018001 
0 0     0     0     0 1 4018001 
0 0     0     0 6.333333333333332 0 4018002 
0 0     0     0     0 1 4018002 
0 0     0     0 9.16666666666667 0 4019201 
0 0     0     0 9.16666666666667 1 4019201 
0 0 .16666666666666607     .5 8.333333333333334 0 4019504 
0 0     0     0     0 1 4019504 
0 0     0     0    6.5 0 4019901 
0 0     0     0     8 1 4019901 
0 0     0     0 6.166666666666668 0 4020001 
0 0     0     0     0 1 4020001 
end 
+1

这里的问题应该至少尝试一些代码。否则,建议您最好显示一个数据示例。没有理由要求其他人发明变量名称,数据示例等:对于其他人来说,吸收长词描述是很困难的。输入'ssc inst dataex'来安装程序,这使得您可以轻松地给出我们一个数据的例子。 –

+0

非常感谢您的建议@NickCox! – Fuca26

回答

1

我一直在努力回答我几天两个问题现在在我发布这个问题后不久,我发现了一个答案,我与你分享。

Points First to Third lead to the answer to question 1 .;第四和第五导致对问题2的回答。

首先,我生成总工作日时间,这是由四个相互排斥的工作活动(working_act1 working_act2 working_act3 working_act4)所花费的时间给出的;变量周末==当观察是指一个周末一天1,否则为0

cap drop tsw 
egen tsw  = rowtotal(working_act1 working_act2 working_act3 working_act4) 
label var tsw "Time spent working" 
tab tsw if weekend==0 
tab tsw if weekend==1 

其次,我创建了一个变量,告诉我是否在特定日期的人要么没有工作或全职工作

cap drop ft_workrest_day 
gen ft_workrest_day = (tsw >=8) | tsw==0 if weekend==1 
replace ft_workrest_day = (tsw >=8) if weekend==0 
label var ft_workrest_day "Worked_8h or rested" 

第三,我创建一个变量,等于2人(即,变量id_ind)谁对谁的所有其他人这两天工作的人工作1天全职和休息的一天,以及这个值丢失

cap drop ft_worker 
bys id_ind: egen ft_worker = total(cond(ft_workrest_day>0, ft_workrest_day, .)) 
replace ft_worker = . if ft_worker==0 | ft_worker==1 
label var ft_worker "Works at least 8h" 

第四,我创建了一个变量,它对于谁在我们

cap drop we_worker_2 
gen we_worker_2 = 0 if ft_worker==2 
replace we_worker_2 = 1 if tsw!=0 & ft_worker==2 & weekend==1 
browse id_ind weekend tsw ft_workrest_day ft_worker we_worker_2 
label var we_worker_2 "Works at least 8h in the w-e" 

第五,我创造它等于1,当一个人工作在这两天全时可变的工作ft_workers等于1,而等于0,谁在工作日全职工作的人并在我们休息。

cap drop we_worker_1 
bys id_ind: egen we_worker_1 = max(we_worker_2) 
browse id_ind weekend tsw ft_workrest_day ft_worker we_worker_2 we_worker_1 
label var we_worker_1 "Full-time w-e worker" 
+1

很高兴你解决了你的问题。如果你想让这些对他人更有用,你可以通过添加一个令牌数据示例来使其变得独立。什么是旅行的一般想法?请注意,'gen worker = work_stast == 0'是第一点的更简洁的解决方案。 –

+0

感谢消息@NickCox。在我习惯了dataex命令之后(也感谢!)我在问题中引入了数据集的示例(请参阅** [UPDATE] **)。 – Fuca26

+0

示例数据和代码仍然不能一起工作。没有变量'work_stat'(或者它是'work_stast'?)。因此,代码将在第一次打击时失败。 –