J'ai un ensemble de données avec les participants qui sont de chaque traitement A ou B et le traitement sont suivis à différents intervalles de temps. Par exemple, participant 1 pourrait avoir des visites au mois 0 (niveau de référence), puis au mois 2, 6 et 12, mais participant 2 pourrait avoir des visites juste au départ et à 6 mois, etc. Je me demandais comment je pouvais compter le nombre de personnes qui passent d'un traitement à un autre lors de leurs visites de suivi. Je sais que ce devrait être assez facile à faire, mais parce que les visites de suivi ne sont pas les mêmes pour tout le monde, je ne peux pas l'air de savoir comment traiter les données manquantes pour certains participants.
Voici un exemple de mes données et ce J'ai essayé de le faire. Comme vous pouvez le constater à partir des données, seuls les participants 1 et 5 des traitements commutés pendant la durée de leur suivi, mais la variable "Compte" que j'ai créée pour prendre la valeur 0 si le participant ne change pas et ne valorisait pas 1 si elles le font commutateur, obtient la valeur 1 partout ... p>
DATA example; input PATID TRT$ VISNO WEIGHT; datalines; 1 A 0 95 1 A 2 96 1 B 6 96 1 B 12 99 2 A 0 80 2 A 6 81 3 A 0 98 3 A 4 120 4 B 0 100 5 A 0 102 5 B 6 95 5 A 12 98 run; proc print data=example; run; proc transpose data=example out=wide1 prefix=TRT; by patid; id visno; var trt; run; proc print data = wide1; title "Transposed data"; run; data switchcount; set wide1; if TRT0=TRT2=TRT6=TRT12=TRT4 then count=0; else count=1; run; proc print data=switchcount; run;
3 Réponses :
Il n'y a pas de présumer que vous voulez un nombre de De même, pour les données pré-données, une donnée Exemple: P> Paid code> qui a chaque
visno code>, chaque ligne transposée a donc au moins une colonne avec une valeur manquante (correspondant au non présent
visno code> s dans le
par code> groupe). La valeur manquante non égale à aucun
visno code>
TRT code> présent dans le groupe, l'évaluation de l'égalité TRT à travers la ligne n'affirmera jamais vrai em>, causant Chaque ligne pour contenir
compte = 1 code>.
Paid code> avoir plusieurs traitements, une requête SQL peut fournir cela. P> Exemple: p>
L'étape avec le traitement de la DOW peut calculer le même compte. P>
data want(keep=result);
do until (last.patid);
set example end=done;
by patid;
if trt ne lag(trt) then switch_count = sum(switch_count, 1-first.patid);
end;
result + switch_count>0;
if done then output;
run;
Merci Richard, c'est très utile!
Nous pouvons utiliser la fonction de décalage pour trouver le traitement de la visite précédente, puis vérifier toutes les lignes si le traitement ne correspond pas au traitement précédent. Pour faire, permet de créer l'exemple de jeu de données comme suit:
proc sql; select distinct PATID from lagged_example where TRT <> PREV_TRT and not missing(PREV_TRT); quit;
Si vous voulez juste trouver des patients qui ont changé de traitement à tout moment au cours des visites (pas de leur dernière visite nécessairement), ce qui signifie que les patients ayant au moins deux traitements au cours de leurs visites, vous pouvez simplement utiliser ce qui suit:
Merci, Esam, c'est très soigné et réalise exactement ce que je voulais!
À quoi ressemble votre résultat souhaité?