我正在对医疗保健数据进行数据分析。我是SAS程序员,刚开始学习Python编码。因此,我想看看Python是否可以接管我在SAS中的一些工作,并且可以通过更少的编码来提高效率。
在医疗保健行业中,我们需要一直创建虚拟变量。例如,我有一个针对不同类型条件的诊断代码列表,并且我想为每种类型的条件创建哑变量。只要成员具有与该条件类型相关的诊断代码之一,该值就为1。
这里的条件表如下:
ICD10 Conditions
F1010 Alcohol_Abuse
F10129 Alcohol_Abuse
F1020 Alcohol_Abuse
F1120 Drug_Abuse
F1190 Drug_Abuse
F0630 Depression
索赔数据如下:
Member ID DX1 DX2 DX3
xxx1 F10129 F1010
xxx1 F1010
xxx2 F1010 F1020 F1120
xxx3 F0630
xxx3 A5555
最终结果如下:
Member ID Alcohol_Abuse Drug_Abuse Depression
xxx1 1 0 0
xxx2 1 1 0
xxx3 0 0 1
在SAS中,这些工作可以轻松完成。 首先,我将第一个表创建为格式表(基本上只是将变量ICD10重命名为我想用作键的变量为“ START”,然后将要显示为“ LABEL”的值重命名):< / p>
DATA CONDITION; SET TABLE1;
FMTNAME = '$CONDITION';
START = ICD10;
LABEL = CONDITIONS;
KEEP START HLO FMTNAME LABEL;
RUN;
PROC FORMAT CNTLIN = FMT.CANCER; RUN;
然后,我将这种格式与声明数据一起“应用”(PUT函数是SAS应用格式的方式,就像使用SQL对TABLE2左键联接以ICD10或DX作为键的TABLE1并保留两个表都具有的所有变量一样):
DATA CLAIM_FLAG; SET TABLE2;
IF PUT(DX1, $CONDITION.) = 'Alcohol_Abuse' OR PUT(DX2, $CONDITION.) = 'Alcohol_Abuse' OR PUT(DX3, $CONDITION.) = 'Alcohol_Abuse'
THEN Alcohol_Abuse = 1; ELSE Alcohol_Abuse = 0;
... (same logic for the other conditions)
RUN;
最终,我将CLAIM_FLAG数据聚合到成员级别,这意味着每个成员只有1行(我跳过了该部分的SAS代码)。
到目前为止,这是我在Python中尝试过的内容(但您无需遵循我所做的工作):
df1 = data[['Member ID', 'DX1']].rename(columns={"DX1":"ICD10"})
df2 = data[['Member ID', 'DX2']].rename(columns={"DX2":"ICD10"})
df3 = data[['Member ID', 'DX3']].rename(columns={"DX3":"ICD10"})
df = pd.concat([df1, df2, df3]).drop_duplicates()
icd_df = df.merge(lookup, on='ICD10', how='left')
如果有人可以提供一个Python程序,该程序可以首先导入像TABLE1这样的EXCEL文件,然后创建虚拟变量并聚合到成员级别(如最终输出显示),那将非常有帮助。感谢您的帮助。