Comment créer une nouvelle colonne basée sur les valeurs de deux autres colonnes ?Bonjour:
Je suis un utilisateur de longue date de JMP et je viens de commencer à me plonger dans les scripts et l'utilisation de l'éditeur de formules. J'ai une grande table (environ 10 000 lignes). J'ai plusieurs colonnes qui m'intéressent :
- Patient_ID : identifiant unique pour chaque patient
- Heure : heure à laquelle l'échantillon de laboratoire a été collecté
- LAB_VALUE : valeur du paramètre lab avec 3 possibilités discrètes (NORMAL, MILD, SEVERE)
- SEXE : Sexe du patient
J'aimerais créer une nouvelle colonne appelée « STATUT » basée sur les éléments suivants :
- Si la valeur de base pour Lab_Value = Normal et qu'au moins une valeur post-base est LÉGÈRE ou SÉVÈRE, alors marquez "1" dans la colonne STATUS.
- Si la valeur de base pour Lab_Value = Mild et qu'au moins une valeur post-baseline est SEVERE, alors marquez "2" dans la colonne STATUS.
- Si la valeur de référence pour Lab_Value = Sévère et qu'au moins une valeur post-référence est LÉGÈRE ou NORMALE, alors marquez « 3 » dans la colonne ÉTAT.
Cela devient un peu compliqué car certains patients abandonnent avant d’avoir terminé tous les laboratoires. Certains patients disposent de données jusqu'au point final (jour 372), et d'autres non. Cela rend donc difficile l’écriture d’un scénario.Pourriez-vous m'aider à m'expliquer comment procéder ? J'ai essayé de créer un tas d'instructions if à l'aide de la fonctionnalité de formule, mais je n'ai pas réussi à la faire fonctionner. Toute aide serait appréciée.
Merci beaucoup
Re : Comment créer une nouvelle colonne basée sur les valeurs de deux autres colonnes ?Cher Jim:
Merci, cela a été incroyablement utile. Je ne peux pas vous remercier assez. Votre script a fonctionné pour moi.
J'ai passé la dernière journée à essayer de comprendre comment ajouter à votre script. En particulier je souhaite créer une 4ème catégorie pour LAB_VALUE. Si le statut des valeurs de laboratoire d'un patient ne remplit aucune des 3 conditions ci-dessous, j'aimerais le signaler comme une quatrième catégorie « 4 ».
J'ai essayé d'ajouter ",4)" à la dernière instruction if, mais cela ne fonctionnerait pas. L'éditeur de script n'arrêtait pas de se plaindre de l'absence de , ou ). Ou cela n’évaluerait pas certaines lignes. Toute aide que vous pourriez offrir serait grandement appréciée.
@txnelson a écrit:
Voici une façon de définir les valeurs de STATUS.Ce n'est pas un code très efficace, mais cela devrait fonctionner.Je n'ai pas pu le tester complètement, mais la logique est assez simple.
dt = current data table();
dt << New Column( "STATUS", formula(
If( :TIME == "BASELINE",
theRow = Row();
thePatient_ID = :PATIENT_ID;
If(:LAB_VALUE == "NORMAL",
If( N Rows( dt << get rows where(
Row()>theRow &
thePatient_ID == :PATIENT_ID &
(:LAB_VALUE == "MILD" | :LAB_VALUE == "SEVERE")
)
) > 0
,
1,
)
,
:LAB_VALUE =="MILD",
If( N Rows( dt << get rows where(
Row()>theRow &
thePatient_ID == :PATIENT_ID &
:LAB_VALUE == "SEVERE"
)
) > 0
,
2
)
,
:LAB_VALUE == "SEVERE"
If( N Rows( ct << get rows where(
Row()>theRow &
thePatient_ID == :PATIENT_ID &
(:LAB_VALUE == "MILD" | :LAB_VALUE == "NORMAL")
)
) > 0
,
3
)
)
)
)
);Je peux imaginer un moyen plus efficace de procéder, mais il ne serait pas implémenté sous forme de formule, mais sous forme de script utilisant certaines des plates-formes JMP.
Re : Comment créer une nouvelle colonne basée sur les valeurs de deux autres colonnes ?Voici une façon de définir les valeurs de STATUS.Ce n'est pas un code très efficace, mais cela devrait fonctionner.Je n'ai pas pu le tester complètement, mais la logique est assez simple.
dt = current data table();
dt << New Column( "STATUS", formula(
If( :TIME == "BASELINE",
theRow = Row();
thePatient_ID = :PATIENT_ID;
If(:LAB_VALUE == "NORMAL",
If( N Rows( dt << get rows where(
Row()>theRow &
thePatient_ID == :PATIENT_ID &
(:LAB_VALUE == "MILD" | :LAB_VALUE == "SEVERE")
)
) > 0
,
1,
)
,
:LAB_VALUE =="MILD",
If( N Rows( dt << get rows where(
Row()>theRow &
thePatient_ID == :PATIENT_ID &
:LAB_VALUE == "SEVERE"
)
) > 0
,
2
)
,
:LAB_VALUE == "SEVERE"
If( N Rows( ct << get rows where(
Row()>theRow &
thePatient_ID == :PATIENT_ID &
(:LAB_VALUE == "MILD" | :LAB_VALUE == "NORMAL")
)
) > 0
,
3
)
)
)
)
);
Je peux imaginer un moyen plus efficace de procéder, mais il ne serait pas implémenté sous forme de formule, mais sous forme de script utilisant certaines des plates-formes JMP.