Bonjour,
C'est ma première participation, mais cela fait longtemps que je suis de près ce forum très riche.
Je rebondis sur ce sujet car je pensais être familier avec les MV et les && ou autres ".", mais là force est de constater que j'ai atteint mes limites.
Mon soucis va plus loin que le post de départ. J'ai une solution de contournement sans passer par une mv, mais je VEUX savoir comment faire avec.
C'est parti :
• Contexte, J'aimerais pour chaque individu calculer son score en lui appliquant un modèle de régression logistique existant.
• La table contenant les coefficients de cette régression logistique a la structure suivante :
• La table de mes individus est la suivante :
• Je veux appliquer le modèle en bouclant sur chaque individu, pour cela je veux créer les mv suivantes qui contiendront les valeurs des coefficients : yeux_bleux_0, yeux_bleux_1, sexe_H_0, sexe_H_1.
• Je commence donc par passer par un call symput :
Voici la log :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 data _null_; set coeff_log end=eof; call symput(compress("VAR_"!!_N_),compress(VAR)); if eof then call symput("N",_N_); call symput(compress(VAR!!"_0"),coeff_0); call symput(compress(VAR!!"_1"),coeff_1); run; %put &yeux_bleus_0.; %put &yeux_bleus_1.; %put &sexe_H_0.; %put &sexe_H_1.;
Tout est ok.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 NOTE: There were 2 observations read from the data set WORK.COEFF_LOG. 903 %put &yeux_bleus_0.; -0.654 904 %put &yeux_bleus_1.; 0.654 905 %put &sexe_H_0.; 0.123 906 %put &sexe_H_1.; -0.123
• Par contre, pour la boucle, j'ai beaucoup de mal !
Voici un de mes nombreux tests :
Et voici la log :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 %macro toto; %do i=1 %to &N.; %put &&&var_&i.._0; %put &&&var_&i.._1; %end; %mend; %toto;
Pourquoi n'ai-je pas la valeur des mv et simplement leur nom ?! HELP
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 MLOGIC(TOTO): Beginning execution. MLOGIC(TOTO): %DO loop beginning; index variable I; start value is 1; stop value is 2; by value is 1. MLOGIC(TOTO): %PUT &&&var_&i.._0 yeux_bleus_0 MLOGIC(TOTO): %PUT &&&var_&i.._1 yeux_bleus_1 MLOGIC(TOTO): %DO loop index variable I is now 2; loop will iterate again. MLOGIC(TOTO): %PUT &&&var_&i.._0 sexe_H_0 MLOGIC(TOTO): %PUT &&&var_&i.._1 sexe_H_1 MLOGIC(TOTO): %DO loop index variable I is now 3; loop will not iterate again. MLOGIC(TOTO): Ending execution.
Merci beaucoup pour vos réponses.
Partager