Type : CREATION_INTERNE
Les exemples utilisent des données synthétiques générées par un `DATA step` avec `datalines` afin de garantir leur autonomie. Une table `SmokingWeight` est créée en session CAS.
| 1 | /* Création d'une session CAS si elle n'existe pas */ |
| 2 | cas; |
| 3 | |
| 4 | /* Assurez-vous que la caslib mylib est disponible et mappée */ |
| 5 | caslib _all_ assign; |
| 6 | |
| 7 | /* Création de la table de données SmokingWeight */ |
| 8 | DATA mylib.SmokingWeight; |
| 9 | INFILE DATALINES; |
| 10 | INPUT Sex $ Race $ Education $ Exercise $ Activity $ Age YearsSmoke PerDay QUIT Change; |
| 11 | DATALINES; |
| 12 | Female White HighSchool Light Active 30 10 15 0 2.5 |
| 13 | Male Black College Moderate Sedentary 45 20 20 1 5.0 |
| 14 | Female Asian GradSchool Heavy Active 55 30 25 1 7.2 |
| 15 | Male White HighSchool Light Sedentary 35 12 10 0 1.8 |
| 16 | Female Black College Moderate Active 40 18 18 1 4.5 |
| 17 | Male Asian GradSchool Heavy Sedentary 60 25 22 0 3.1 |
| 18 | Female White HighSchool Light Active 28 8 12 1 6.0 |
| 19 | Male Black College Moderate Sedentary 50 22 19 0 2.0 |
| 20 | Female Asian GradSchool Heavy Active 48 28 24 1 8.0 |
| 21 | Male White HighSchool Light Sedentary 32 10 11 0 1.5 |
| 22 | ; |
| 23 | RUN; |
| 24 | |
| 25 | /* 1. Modélisation de la variable de traitement 'Quit' avec PROC LOGSELECT */ |
| 26 | PROC LOGSELECT DATA=mylib.SmokingWeight; |
| 27 | class Sex Race Education Exercise Activity; |
| 28 | model QUIT(Event='1') = Sex Race Education |
| 29 | Exercise Activity Age YearsSmoke PerDay; |
| 30 | OUTPUT out=mylib.swDREstData pred=pTrt copyvars=(_ALL_); |
| 31 | RUN; |
| 32 | |
| 33 | /* Calcul de la probabilité de la condition de contrôle (Quit=0) */ |
| 34 | DATA mylib.swDREstData; |
| 35 | SET mylib.swDREstData; |
| 36 | pCnt = 1 - pTrt; |
| 37 | RUN; |
| 38 | |
| 39 | /* 2. Modélisation de la variable de résultat 'Change' avec PROC BART */ |
| 40 | PROC BART DATA=mylib.swDREstData nTree=100 nMC=200 seed=2156; |
| 41 | class Sex Race Education Exercise Activity QUIT; |
| 42 | model Change = Sex Race Education Exercise QUIT Activity |
| 43 | Age YearsSmoke PerDay; |
| 44 | store out=mylib.bartOutMod; |
| 45 | RUN; |
| 46 | |
| 47 | /* 3. Estimation des effets causaux avec PROC CAEFFECT (AIPW) */ |
| 48 | PROC CAEFFECT DATA=mylib.swDREstData method=aipw; |
| 49 | treatvar QUIT; |
| 50 | outcomevar Change; |
| 51 | outcomemodel restore=mylib.bartOutMod predName=P_Change; |
| 52 | pom treatLev=1 treatProb=pTrt; |
| 53 | pom treatLev=0 treatProb=pCnt; |
| 54 | difference evtLev=1; |
| 55 | RUN; |
| 56 |
| 1 | /* Création d'une session CAS si elle n'existe pas */ |
| 2 | cas; |
| 3 | |
| 4 | /* Assurez-vous que la caslib mylib est disponible et mappée */ |
| 5 | caslib _all_ assign; |
| 6 | |
| 7 | /* Création de la table de données SmokingWeight */ |
| 8 | DATA mylib.SmokingWeight; |
| 9 | INFILE DATALINES; |
| 10 | INPUT Sex $ Race $ Education $ Exercise $ Activity $ Age YearsSmoke PerDay QUIT Change; |
| 11 | DATALINES; |
| 12 | Female White HighSchool Light Active 30 10 15 0 2.5 |
| 13 | Male Black College Moderate Sedentary 45 20 20 1 5.0 |
| 14 | Female Asian GradSchool Heavy Active 55 30 25 1 7.2 |
| 15 | Male White HighSchool Light Sedentary 35 12 10 0 1.8 |
| 16 | Female Black College Moderate Active 40 18 18 1 4.5 |
| 17 | Male Asian GradSchool Heavy Sedentary 60 25 22 0 3.1 |
| 18 | Female White HighSchool Light Active 28 8 12 1 6.0 |
| 19 | Male Black College Moderate Sedentary 50 22 19 0 2.0 |
| 20 | Female Asian GradSchool Heavy Active 48 28 24 1 8.0 |
| 21 | Male White HighSchool Light Sedentary 32 10 11 0 1.5 |
| 22 | ; |
| 23 | RUN; |
| 24 | |
| 25 | /* 1. Modélisation de la variable de traitement 'Quit' avec PROC LOGSELECT */ |
| 26 | PROC LOGSELECT DATA=mylib.SmokingWeight; |
| 27 | class Sex Race Education Exercise Activity; |
| 28 | model QUIT(Event='1') = Sex Race Education |
| 29 | Exercise Activity Age YearsSmoke PerDay; |
| 30 | OUTPUT out=mylib.swDREstData pred=pTrt copyvars=(_ALL_); |
| 31 | RUN; |
| 32 | |
| 33 | /* Calcul de la probabilité de la condition de contrôle (Quit=0) */ |
| 34 | DATA mylib.swDREstData; |
| 35 | SET mylib.swDREstData; |
| 36 | pCnt = 1 - pTrt; |
| 37 | RUN; |
| 38 | |
| 39 | /* 2. Modélisation de la variable de résultat 'Change' avec PROC BART */ |
| 40 | PROC BART DATA=mylib.swDREstData nTree=100 nMC=200 seed=2156; |
| 41 | class Sex Race Education Exercise Activity QUIT; |
| 42 | model Change = Sex Race Education Exercise QUIT Activity |
| 43 | Age YearsSmoke PerDay; |
| 44 | store out=mylib.bartOutMod; |
| 45 | RUN; |
| 46 | |
| 47 | /* 3. Estimation des effets causaux avec PROC CAEFFECT (TMLE) */ |
| 48 | PROC CAEFFECT DATA=mylib.swDREstData method=tmle; |
| 49 | treatvar QUIT; |
| 50 | outcomevar Change; |
| 51 | outcomemodel restore=mylib.bartOutMod predName=P_Change; |
| 52 | pom treatLev=1 treatProb=pTrt; |
| 53 | pom treatLev=0 treatProb=pCnt; |
| 54 | difference evtLev=1; |
| 55 | RUN; |
| 56 |
| 1 | /* Création d'une session CAS si elle n'existe pas */ |
| 2 | cas; |
| 3 | |
| 4 | /* Assurez-vous que la caslib mylib est disponible et mappée */ |
| 5 | caslib _all_ assign; |
| 6 | |
| 7 | /* Création de la table de données SmokingWeight */ |
| 8 | DATA mylib.SmokingWeight; |
| 9 | INFILE DATALINES; |
| 10 | INPUT Sex $ Race $ Education $ Exercise $ Activity $ Age YearsSmoke PerDay QUIT Change; |
| 11 | DATALINES; |
| 12 | Female White HighSchool Light Active 30 10 15 0 2.5 |
| 13 | Male Black College Moderate Sedentary 45 20 20 1 5.0 |
| 14 | Female Asian GradSchool Heavy Active 55 30 25 1 7.2 |
| 15 | Male White HighSchool Light Sedentary 35 12 10 0 1.8 |
| 16 | Female Black College Moderate Active 40 18 18 1 4.5 |
| 17 | Male Asian GradSchool Heavy Sedentary 60 25 22 0 3.1 |
| 18 | Female White HighSchool Light Active 28 8 12 1 6.0 |
| 19 | Male Black College Moderate Sedentary 50 22 19 0 2.0 |
| 20 | Female Asian GradSchool Heavy Active 48 28 24 1 8.0 |
| 21 | Male White HighSchool Light Sedentary 32 10 11 0 1.5 |
| 22 | ; |
| 23 | RUN; |
| 24 | |
| 25 | /* 1. Modélisation de la variable de traitement 'Quit' avec PROC LOGSELECT */ |
| 26 | PROC LOGSELECT DATA=mylib.SmokingWeight; |
| 27 | class Sex Race Education Exercise Activity; |
| 28 | model QUIT(Event='1') = Sex Race Education |
| 29 | Exercise Activity Age YearsSmoke PerDay; |
| 30 | OUTPUT out=mylib.swDREstData pred=pTrt copyvars=(_ALL_); |
| 31 | RUN; |
| 32 | |
| 33 | /* Calcul de la probabilité de la condition de contrôle (Quit=0) */ |
| 34 | DATA mylib.swDREstData; |
| 35 | SET mylib.swDREstData; |
| 36 | pCnt = 1 - pTrt; |
| 37 | RUN; |
| 38 | |
| 39 | /* 2. Modélisation de la variable de résultat 'Change' avec PROC BART */ |
| 40 | PROC BART DATA=mylib.swDREstData nTree=100 nMC=200 seed=2156; |
| 41 | class Sex Race Education Exercise Activity QUIT; |
| 42 | model Change = Sex Race Education Exercise QUIT Activity |
| 43 | Age YearsSmoke PerDay; |
| 44 | store out=mylib.bartOutMod; |
| 45 | RUN; |
| 46 | |
| 47 | /* 3. Estimation des effets causaux avec PROC CAEFFECT (AIPW) par sous-groupe */ |
| 48 | PROC CAEFFECT DATA=mylib.swDREstData method=aipw; |
| 49 | class Sex; /* Ajout d'une variable de classification pour l'analyse par groupe */ |
| 50 | treatvar QUIT; |
| 51 | outcomevar Change; |
| 52 | outcomemodel restore=mylib.bartOutMod predName=P_Change; |
| 53 | pom treatLev=1 treatProb=pTrt; |
| 54 | pom treatLev=0 treatProb=pCnt; |
| 55 | difference evtLev=1; |
| 56 | BY Sex; /* Analyse séparée par le sexe */ |
| 57 | ods OUTPUT Estimates=mylib.aipwEstimates OutDiff=mylib.aipwDifferences; /* Sauvegarde des résultats */ |
| 58 | RUN; |
| 59 |
| 1 | /* Création d'une session CAS si elle n'existe pas */ |
| 2 | cas; |
| 3 | |
| 4 | /* Assurez-vous que la caslib mylib est disponible et mappée */ |
| 5 | caslib _all_ assign; |
| 6 | |
| 7 | /* Nettoyage des tables existantes pour s'assurer d'un redémarrage propre */ |
| 8 | PROC CASUTIL; |
| 9 | droptable casdata='SmokingWeight' incaslib='mylib' quiet; |
| 10 | droptable casdata='swDREstData' incaslib='mylib' quiet; |
| 11 | droptable casdata='bartOutMod' incaslib='mylib' quiet; |
| 12 | RUN; |
| 13 | |
| 14 | /* Création d'un ensemble de données plus grand simulé */ |
| 15 | DATA mylib.SmokingWeight(promote=yes); |
| 16 | array char_vars Sex $ Race $ Education $ Exercise $ Activity $; |
| 17 | DO i = 1 to 10000; /* Simule 10000 observations */ |
| 18 | call streaminit(12345 + i); |
| 19 | DO _n_ = 1 to dim(char_vars); |
| 20 | char_vars(_n_) = ranword(char_vars(_n_)); /* Générer des valeurs de caractères aléatoires */ |
| 21 | END; |
| 22 | |
| 23 | IF rand('UNIFORM') < 0.5 THEN Sex = 'Female'; ELSE Sex = 'Male'; |
| 24 | IF rand('UNIFORM') < 0.7 THEN Race = 'White'; ELSE Race = 'Black'; |
| 25 | IF rand('UNIFORM') < 0.6 THEN Education = 'HighSchool'; ELSE Education = 'College'; |
| 26 | IF rand('UNIFORM') < 0.5 THEN Exercise = 'Light'; ELSE Exercise = 'Moderate'; |
| 27 | IF rand('UNIFORM') < 0.5 THEN Activity = 'Active'; ELSE Activity = 'Sedentary'; |
| 28 | Age = round(rand('NORMAL', 40, 10)); |
| 29 | YearsSmoke = round(rand('NORMAL', 15, 5)); |
| 30 | PerDay = round(rand('NORMAL', 15, 5)); |
| 31 | IF rand('UNIFORM') < 0.5 THEN QUIT = 0; ELSE QUIT = 1; |
| 32 | Change = rand('NORMAL', 3, 1.5) + (QUIT * rand('NORMAL', 2, 0.5)) - (PerDay * 0.1); |
| 33 | OUTPUT; |
| 34 | END; |
| 35 | drop i; |
| 36 | label QUIT = "Arrêt du Tabac (0=Non, 1=Oui)"; |
| 37 | label Change = "Changement de Poids (kg)"; |
| 38 | RUN; |
| 39 | |
| 40 | /* 1. Modélisation de la variable de traitement 'Quit' avec PROC LOGSELECT */ |
| 41 | /* Utilisation de l'option NTHREADS pour le parallélisme en CAS */ |
| 42 | PROC LOGSELECT DATA=mylib.SmokingWeight nthreads=4; |
| 43 | class Sex Race Education Exercise Activity; |
| 44 | model QUIT(Event='1') = Sex Race Education |
| 45 | Exercise Activity Age YearsSmoke PerDay; |
| 46 | OUTPUT out=mylib.swDREstData pred=pTrt copyvars=(_ALL_); |
| 47 | RUN; |
| 48 | |
| 49 | /* Calcul de la probabilité de la condition de contrôle (Quit=0) */ |
| 50 | DATA mylib.swDREstData; |
| 51 | SET mylib.swDREstData; |
| 52 | pCnt = 1 - pTrt; |
| 53 | RUN; |
| 54 | |
| 55 | /* 2. Modélisation de la variable de résultat 'Change' avec PROC BART */ |
| 56 | /* Utilisation d'un Ntree et Nmc appropriés pour de grands jeux de données */ |
| 57 | PROC BART DATA=mylib.swDREstData nTree=200 nMC=500 seed=2156; |
| 58 | class Sex Race Education Exercise Activity QUIT; |
| 59 | model Change = Sex Race Education Exercise QUIT Activity |
| 60 | Age YearsSmoke PerDay; |
| 61 | store out=mylib.bartOutMod; |
| 62 | RUN; |
| 63 | |
| 64 | /* 3. Estimation des effets causaux avec PROC CAEFFECT (TMLE) pour grands ensembles de données */ |
| 65 | PROC CAEFFECT DATA=mylib.swDREstData method=tmle; |
| 66 | treatvar QUIT; |
| 67 | outcomevar Change; |
| 68 | outcomemodel restore=mylib.bartOutMod predName=P_Change; |
| 69 | pom treatLev=1 treatProb=pTrt; |
| 70 | pom treatLev=0 treatProb=pCnt; |
| 71 | difference evtLev=1; |
| 72 | RUN; |
| 73 |