2015-10-22 1 views
1

J'espère que vous pourrez m'aider avec mon problème concernant un recodage dans une boucle imbriquée (syntaxe SPSS). :)Syntaxe SPSS: recodage en boucle imbriquée

Dans ma base de données SPSS, j'ai des mesures du niveau sanguin (3 par semaine sur 20 semaines) pour différents médicaments. Je veux créer des boîtes à moustaches pour chaque substance, en recodant pour générer une nouvelle variable pour chaque substance.

Le processus suivant décrit le processus pour UNE substance. Je peux résumer le reste ayant la solution pour une substance.

Donc, il y aurait le chemin en cliquant via GUI, ce qui est très épuisant pour autant de mesures - et sujettes aux erreurs -, donc je voudrais faire cela avec la syntaxe SPSS. Pour rappel: 3 mesures par semaine (1-3) sur 20 semaines (0-19);

Le RECODER pour la première mesure de la première semaine ressemble à ceci:

DO IF (W0_TDM_1AP=1). 
RECODE 
W0_TDM_1Erg 
(ELSE=Copy) INTO AMS. 
END IF. 
EXECUTE.

Si je voulais mettre en œuvre cela avec Python ou PHP, il ressemblerait à ceci (pseudo-code):

for($i=0; $i<19; $i++) 
{ 
    for($j=1; $j<3; $j++) 
    { 
    DO IF (W{$i}_TDM_{$j}AP=1). 
    RECODE 
    W{$i}_TDM_{$j}Erg 
    (ELSE=Copy) INTO AMS. 
    END IF. 
    EXECUTE. 
    } 
} 

Mon idée de base était: Boucle imbriquée et sur la boucle interne exécuter le recodage. Comme $ i et j $ serait entiers, je dois faire un casting à chaîne, puis vérifier la condition: (pseudo-code)

LOOP #i=0 TO 19 . 
LOOP #j=1 TO 3 . 
    var1 = CONCAT("W",STRING(#i),"_TDM_",STRING(#j),"AP") . 
    var2 = CONCAT("W",STRING(#i),"_TDM_",STRING(#j),"Erg") . 
    DO IF (var1=1) . 
    RECODE 
    var2 
    (ELSE=Copy) INTO AMS . 
    END IF . 
    EXECUTE . 
END LOOP . 
END LOOP . 

Je ne suis pas très familier avec la syntaxe SPSS, mais serait mon idée de base comment pourrait travailler. Ce dont j'ai besoin, c'est du code de syntaxe de travail pour mon pseudo code PHP/Pythonish. :-)

+1

Pourquoi voudriez-vous diviser ceci en un ensemble de variables? Un pour chaque médicament? Ne serait-il pas préférable d'avoir en format long tel qu'il est (pour autant que je sache - malgré toute mention explicite). Peut être utile de décrire la structure du fichier et votre objectif final exactement. –

+0

Non, je dois regrouper/recueillir toutes les mesures (3 par semaine pendant 20 semaines) pour une substance, puis créer des boîtes à moustaches en fonction des données recueillies de cette nouvelle variable. Je peux le faire en recodant via GUI, fonctionne comme un charme, mais pour chaque mesure, je dois refaire tous les clics (60 fois pour une substance), donc ce serait le travail parfait pour une boucle imbriquée, qui compte à travers le semaines et mesures recoding dans la même nouvelle variable (ici appelé AMS). Mon objectif final est de recoder toutes les mesures correspondantes en une nouvelle variable. :) – dacoda

+1

Impossible de ['SPLIT FILE'] (http://www-01.ibm.com/support/knowledgecenter/SSLVMB_21.0.0/com.ibm.spss.statistics.help/syn_split_file_overview.htm?lang=fr)) vous être utile ici? –

Répondre

1

Pour traduire l'extrait de code que vous avez fourni, ce serait l'équivalent dans SPSS, qui utilise SPSS's Macro language facility:

define !RunJob() 
!do !i = 0 !to 19 
    !do !j = 1 !to 3 
    do if (!concat("W", !i, "_TDM_",!j, "AP"))=1. 
     recode !concat("W", !i, "_TDM_",!j, "ERG") (else=copy) into AMS. 
    end if. 
    !doend 
!doend 
!enddefine. 


set mprint on. 
!RunJob. 
set mprint off.