我正在尝试从STATA转换为python,并在python中重新创建一些以前的工作/代码。我有一个包含5个变量,1个患者ID号和4个ICD-9外部伤害代码(称为电子代码)的数据集
我想创建一个变量,以Ecodes 880.XX-889.xx标识人们是堕落者还是非堕落者。
我想要一个变量,该变量指示患者是否在4个ecode变量(值为1)中的任何一个中都具有代码E880.xx-E889.xx,如果他们没有E880.xx-E889.xx代码给他们一个0的值,但是如果缺少4个电子代码值,就不要给他们一个值(编码为缺失),因为它们没有受到外部伤害。
在STATA中,代码非常直观:
gen fall_inj_ecode = 0
foreach var in ecode1 ecode2 ecode3 ecode4{
replace fall_inj_ecode=1 if strpos(`var', "E880")>0
replace fall_inj_ecode=1 if strpos(`var', "E881")>0
replace fall_inj_ecode=1 if strpos(`var', "E882")>0
replace fall_inj_ecode=1 if strpos(`var', "E883")>0
replace fall_inj_ecode=1 if strpos(`var', "E884")>0
replace fall_inj_ecode=1 if strpos(`var', "E885")>0
replace fall_inj_ecode=1 if strpos(`var', "E886")>0
replace fall_inj_ecode=1 if strpos(`var', "E887")>0
replace fall_inj_ecode=1 if strpos(`var', "E888")>0
请注意,有些子代码(因此带有“ .xx”部分)没有句号。因此,代码E8801被认为介于880.xx和889.xx之间,表示坠落伤害。
对于STATA来说,幸运的是,如果ecode值丢失或为空,它将自动填充以将新变量标记为丢失,我不确定python是否是这种情况。不幸的是,这就是我被困住的地方。在网上搜索后,我似乎找不到与Python等效的代码的任何示例。任何帮助将不胜感激
答案 0 :(得分:0)
您的数据可能采用多种不同的形式,基本问题是相同的,但是具体实现方式将取决于数据的外观。
这是假定数据格式的有效示例:
faller_codes = ['E880', 'E881', 'E882', 'E883', 'E884', 'E885', 'E886', 'E887', 'E888']
patients = [
(1, ['example E2345', 'example E8801', 'E884 example', 'E799, E880, E8881']),
(2, ['example E2345', 'example E8891', 'E9880 example', ''])
]
faller_patients = [
n for n, codes in patients
if any([
any([
faller_code in code
for faller_code in faller_codes
]) for code in codes
])
]
print(faller_patients)
跑步后,faller_patients
仅包含“堕落”患者的ID。