如何使用Python创建多个伪变量

时间:2019-06-18 01:25:01

标签: python pandas sas data-analysis

我正在对医疗保健数据进行数据分析。我是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文件,然后创建虚拟变量并聚合到成员级别(如最终输出显示),那将非常有帮助。感谢您的帮助。

0 个答案:

没有答案