Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    janvier 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : janvier 2015
    Messages : 27
    Points : 6
    Points
    6

    Par défaut Variable globale tableau

    Bonjour,

    Je souhaite pour réaliser un calcul utiliser des tableaux issus de deux étapes data.
    Ces deux étapes data sont du type suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    DATA Table_1 ;
    	INPUT Age E1 E2 E3 E4;
    	CARDS;
    	20 100 99 98 97
    	21 100 95 92 91
    	22 100 95 88 82
    	23 100 90 88 84
    	;
    RUN;
     
    DATA Table_2 ;
    	INPUT Age E1 E2 E3 E4;
    	CARDS;
    	20 100 80 70 65
    	21 100 90 84 80
    	22 100 95 88 75
    	23 100 80 75 70
    	;
    RUN;
    Est-ce qu'il existe un moyen de faire référence aux valeurs de ces tableaux dans une autre étape DATA dans laquelle j'effectuerai mes calculs ?
    Ou suis-je obligé de créer plusieurs milliers de macro-variables (les deux tables sont en réalité asses volumineuses) ?

    Merci par avance pour votre aide.

  2. #2
    Membre confirmé
    Homme Profil pro
    Consultant Finance/Assurance
    Inscrit en
    décembre 2013
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant Finance/Assurance

    Informations forums :
    Inscription : décembre 2013
    Messages : 197
    Points : 634
    Points
    634

    Par défaut

    Bonjour,

    Il y a plusieurs méthodes pour faire référence à des tables et pour faire des rechercheV.
    Un exemple en utilisant du hashing :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    DATA Table_1 ;
    	INPUT Age E1 E2 E3 E4;
    	CARDS;
    20 100 99 98 97
    21 100 95 92 91
    22 100 95 88 82
    23 100 90 88 84
    	;
    RUN;
     
    DATA Table_2 ;
    	INPUT Age E1 E2 E3 E4;
    	CARDS;
    20 100 80 70 65
    21 100 90 84 80
    22 100 95 88 75
    23 100 80 75 70
    	;
    RUN;
     
    data travail;
    input age x table;
    cards;
    20 10 1
    20 10 2
    ;
    run;
     
     
    Data calcul;
    If _n_ = 1 then do;
    	IF 0 then set Table_1;
    	DCL HASH tab1 (dataset: 'Table_1');
    	tab1.definekey ('Age');
    	tab1.definedata ('E1', 'E2', 'E3');
    	tab1.definedone();
     
    	DCL HASH tab2 (dataset: 'Table_2');
    	tab2.definekey ('Age');
    	tab2.definedata ('E1', 'E2', 'E3');
    	tab2.definedone();
    End;
    set Travail;
    /* Condition pour travailler avec la table "Table_1" */
    If table = 1 then do;
    	rc = tab1.find();
    	/* Utilisation de E2 qui provient de Table_1 sur l'age concerné */
    	Indicateur = x * E2;
    End;
    /* Condition pour travailler avec la table "Table_2" */
    Else do;
    	rc = tab2.find();
    	Indicateur = x * E2;
    End;
    run;
    Je calcule un indicateur en faisant un rechercheV dans Table_1 ou Table_2 en fonction d'une condition.

    Flo00154

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    janvier 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : janvier 2015
    Messages : 27
    Points : 6
    Points
    6

    Par défaut

    Merci pour ce retour. Ça ressemble à un merge sophistiqué.

    Par contre j'ai toujours un problème, c'est que pour mon calcul je dois faire référence à des valeurs de table1 et table2 mais sur sur plusieurs âge pour chaque ligne du tableau de travail (par exemple age et age+1).
    C'est possible aussi avec la technique que tu me donnes ?

  4. #4
    Membre confirmé
    Homme Profil pro
    Consultant Finance/Assurance
    Inscrit en
    décembre 2013
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant Finance/Assurance

    Informations forums :
    Inscription : décembre 2013
    Messages : 197
    Points : 634
    Points
    634

    Par défaut

    Oui c'est possible mais le mieux serait d'avoir une table factice de travail pour qu'on puisse t'aider au mieux. Tu as envoyé les deux tableaux à utiliser mais il manque la table de travail + les critères d'utilisation.

    Flo00154

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    janvier 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : janvier 2015
    Messages : 27
    Points : 6
    Points
    6

    Par défaut

    Merci pour ce retour.
    Voilà un exemple simple de calcul ou je fais référence à deux ages (deux lignes) des tables références

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    DATA Table_1 ;
    	INPUT Age E1 E2 E3 E4;
    	CARDS;
    	20 100 99 98 97
    	21 100 95 92 91
    	22 100 95 88 82
    	23 100 90 88 84
    	;
    RUN;
     
    DATA Table_2 ;
    	INPUT Age E1 E2 E3 E4;
    	CARDS;
    	20 100 80 70 65
    	21 100 90 84 80
    	22 100 95 88 75
    	23 100 80 75 70
    	;
    RUN;
     
    DATA Calcul;
    	" Résultat = E1(age+1)/E1/(age) ";
    RUN ;

  6. #6
    Membre confirmé
    Homme Profil pro
    Consultant Finance/Assurance
    Inscrit en
    décembre 2013
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant Finance/Assurance

    Informations forums :
    Inscription : décembre 2013
    Messages : 197
    Points : 634
    Points
    634

    Par défaut

    Une solution pour faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    DATA Table_1 ;
    	INPUT Age E1 E2 E3 E4;
    	CARDS;
    20 100 99 98 97
    21 100 95 92 91
    22 100 95 88 82
    23 100 90 88 84
    	;
    RUN;
     
    DATA Table_2 ;
    	INPUT Age E1 E2 E3 E4;
    	CARDS;
    20 100 80 70 65
    21 100 90 84 80
    22 100 95 88 75
    23 100 80 75 70
    	;
    RUN;
     
    data travail;
    input age x table;
    cards;
    20 10 1
    20 10 2
    ;
    run;
     
     
    Data calcul;
    If _n_ = 1 then do;
    	IF 0 then set Table_1;
    	DCL HASH tab1 (dataset: 'Table_1');
    	tab1.definekey ('Age');
    	tab1.definedata ('E1', 'E2', 'E3');
    	tab1.definedone();
     
    	DCL HASH tab2 (dataset: 'Table_2');
    	tab2.definekey ('Age');
    	tab2.definedata ('E1', 'E2', 'E3');
    	tab2.definedone();
    End;
    set Travail;
    /* Condition pour travailler avec la table "Table_1" */
    If table = 1 then do;
    	/* On va chercher E1 pour l'age n et on stock le résultat dans la variable ret*/
    	rc = tab1.find();
    	Ret = E1;
    	/* On va chercher E1 pour l'age n +1 */
    	Age = age + 1;
    	rc = tab1.find();
    	Resultat = E1 / ret ;
    End;
    /* Condition pour travailler avec la table "Table_2" */
    Else do;
    	rc = tab2.find();
    	Ret = E1;
    	Age = age + 1;
    	rc = tab2.find();
    	Resultat = E1 / ret ;
    End;
    run;
    Pour chercher une information avec les tables hash on utilise la fonction find(), elle va faire un rechercheV sur le tableau visé en utilisant la variable qui est dans l'instruction definekey.
    Pour chercher plusieurs informations, il faut faire varier l'age et utiliser la fonction find() de nouveau.

    Flo00154

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    janvier 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : janvier 2015
    Messages : 27
    Points : 6
    Points
    6

    Par défaut

    Merci, je testerai ça demain mais ça devrait fonctionner.
    Par contre je trouve que ça fait beaucoup de lignes de code pour un simple recherchev ...
    Il n'y a pas de solution plus simple et plus rapide ?

  8. #8
    Membre confirmé
    Homme Profil pro
    Consultant Finance/Assurance
    Inscrit en
    décembre 2013
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant Finance/Assurance

    Informations forums :
    Inscription : décembre 2013
    Messages : 197
    Points : 634
    Points
    634

    Par défaut

    Plus simple et plus rapide je ne sais pas mais il y a d'autres solutions : utiliser un format, jouer avec les fusions, utiliser des index ou utiliser des arrays...

    La solution avec le hash n'est pas compliquée et nécessite une seule ligne "rc = tab1.Find()" pour réaliser l'opération. Pour ma part j'utilise le hash ou le format qui fonctionne très bien sur des Vlookup simple.

    Flo00154

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    janvier 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : janvier 2015
    Messages : 27
    Points : 6
    Points
    6

    Par défaut

    J'avais pensé faire avec un Array au début.
    Mais la données n'est pas accessible d'une étape DATA à l'autre.
    Du coup si tu peux m'expliquer rapidement comment procéder avec un Array, ça serait ppas mal.

  10. #10
    Membre confirmé
    Homme Profil pro
    Consultant Finance/Assurance
    Inscrit en
    décembre 2013
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant Finance/Assurance

    Informations forums :
    Inscription : décembre 2013
    Messages : 197
    Points : 634
    Points
    634

    Par défaut

    Avec un array il faut d'abord charger les depuis Table_1 dans l'array que tu crés.
    Ensuite tu va chercher directement l'info via les positions.

    Un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    DATA Table_1 ;
    	INPUT Age E1 E2 E3 E4;
    	CARDS;
    20 100 99 98 97
    21 100 95 92 91
    22 100 95 88 82
    23 100 90 88 84
    ;
    RUN;
     
    data travail;
    input age x table;
    cards;
    20 10 1
    21 10 2
    ;
    run;
     
    Data use_array (drop = E:);
    /* Déclaration de l'array */
    array y{20:23,1:4} _temporary_ ;
    /* Remplissage de l'array avec les données de Table_1 */
    If _n_ = 1 then do until (last = 1);
    	set table_1 end = last;
    	y{age,1} = E1;
    	y{age,2} = E2;
    	y{age,3} = E3;
    	y{age,4} = E4;
    End;
    /* Utilisation de ces données pour calculer E1(age + 1) / E1 (age) */
    Set travail;
    /* Pour avoir avec E2 on met y{age+1,2} /  y{age,2} */
    resultat = y{age + 1,1} / y{age,1};
    run;
    Flo00154

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    janvier 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : janvier 2015
    Messages : 27
    Points : 6
    Points
    6

    Par défaut

    Merci ça me semble mieux correspondre à mon besoin.
    Je ne savais pas que l'on pouvait faire plusieurs set dans un Data de cette façon.

    Par contre 2 petites questions encore.

    Dans la boucle suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    If _n_ = 1 then do until (last = 1);
    	set table_1 end = last;
    	y{age,1} = E1;
    	y{age,2} = E2;
    	y{age,3} = E3;
    	y{age,4} = E4;
    End;
    Je comprends que _N_ est une variable automatique qui permet de retourner le numéro de ligne lue, et que l'instruction _N_=1 permet de démarrer à la 1ère observation. Est-ce que cette instruction est indispensable (je pensais que par défaut la lecture se faisait du début à la fin) ?

    Je ne connaissais pas LAST=1 et END=LAST.
    En recherchant sur internet, j'ai cru comprendre que END=LAST permet de créer une variable numérique temporaire appelée LAST, initialisée à 0 et valant 1 quant la dernière observation est lue. Cette variable n'est pas écrite dans la DATA. Est-ce que c'est bien ça ?

  12. #12
    Membre confirmé
    Homme Profil pro
    Consultant Finance/Assurance
    Inscrit en
    décembre 2013
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant Finance/Assurance

    Informations forums :
    Inscription : décembre 2013
    Messages : 197
    Points : 634
    Points
    634

    Par défaut

    Je comprends que _N_ est une variable automatique qui permet de retourner le numéro de ligne lue, et que l'instruction _N_=1 permet de démarrer à la 1ère observation. Est-ce que cette instruction est indispensable (je pensais que par défaut la lecture se faisait du début à la fin) ?
    Cette instruction est indispensable pour que SAS ne réalise cette opération qu'une seule fois lors de l'étape DATA. Notre but c'est de charger l'array une fois et de s'en servir après, sans cette instruction l'array sera rechargé à chaque itération -> perte de temps et pas optimisé.

    En recherchant sur internet, j'ai cru comprendre que END=LAST permet de créer une variable numérique temporaire appelée LAST, initialisée à 0 et valant 1 quant la dernière observation est lue. Cette variable n'est pas écrite dans la DATA. Est-ce que c'est bien ça ?
    Exact. Après le mot clé "End = " tu peux mettre ce que tu veux pour créer un marqueur qui aura ce nom. Ce marqueur vaudra 1 si on est à la dernière observation de la table et 0 sinon. Ce marqueur n'est pas output par défaut, comme les marqueurs FIRST et LAST.

    Flo00154

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    janvier 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : janvier 2015
    Messages : 27
    Points : 6
    Points
    6

    Par défaut

    Bonjour,

    J'essaye de créer plusieurs tableaux, en utilisant la méthode décrite ci-dessous, mais ça ne fonctionne pas.
    Pouvez-vous m'aider à comprendre pourquoi svp ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    %MACRO M;
     
    DATA CALCUL (DROP = Lx: AGE);
    	/* Déclaration des arrays */
    	ARRAY Lx_inv(16:67,0:49) _TEMPORARY_;
    	ARRAY Sx(16:66,0:35) _TEMPORARY_;
    	ARRAY Lx_Inc(16:66,0:36) _TEMPORARY_;
    	/* Remplissage des arrays avec les données de la table Tb_SAS.Lx_Inval */
    	/* 	_N_ est une variable automatique qui permet de retourner le numéro de ligne lue
    	Cette instruction est indispensable pour que SAS ne réalise cette opération qu'une seule fois lors 
    	de l'étape DATA. Notre but c'est de charger l'array une fois et de s'en servir après, sans cette 
    	instruction l'array sera rechargé à chaque itération -> perte de temps et pas optimisé.		*/
    	/* END=LAST permet de créer une variable numérique temporaire appelée LAST, initialisée à 0 et 
    	valant 1 quant la dernière observation est lue. Cette variable n'est pas écrite dans la DATA. 
    	Après le mot clé "End = " tu peux mettre ce que tu veux pour créer un marqueur qui aura ce nom. 
    	Ce marqueur vaudra 1 si on est à la dernière observation de la table et 0 sinon. 
    	Ce marqueur n'est pas output par défaut, comme les marqueurs FIRST et LAST. */
    	LAST_1=0;
    	IF _N_ = 1 THEN DO UNTIL (LAST_1 = 1);
    		SET Tb_SAS.Lx_Inval END=LAST_1;
    		%DO i=0 %TO 49;
    			Lx_inv{Age,&i}=Lx_INV_&i;
    		%END;
    	END;
     
    	LAST_2=0;
    	IF _N_ = 1 THEN DO UNTIL (LAST_2 = 1);
    		SET Tb_SAS.Sx_Passage; END=LAST_2;
    		%DO j=0 %TO 35;
    			Sx{AGE,&j}=Sx_&j;
    		%END;
    	END;
     
    	LAST_3=1;
    	IF _N_ = 1 THEN DO UNTIL (LAST_3 = 1);
    		SET Tb_SAS.Lx_Incap; END=LAST_3;
    		%DO j=0 %TO 35;
    			Lx_inc(AGE,&j)=Lx_INC_&j;
    		%END;
    	END;
     
     
    	RUN;
     
    %MEND;
     
    %M;

  14. #14
    Membre confirmé
    Homme Profil pro
    Consultant Finance/Assurance
    Inscrit en
    décembre 2013
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant Finance/Assurance

    Informations forums :
    Inscription : décembre 2013
    Messages : 197
    Points : 634
    Points
    634

    Par défaut

    mais ça ne fonctionne pas.
    Bonjour,

    Quelle erreur s'affiche dans ton Log ?
    Qu'est-ce qui ne fonctionne pas ?

    Flo00154

  15. #15
    Futur Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    janvier 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : janvier 2015
    Messages : 27
    Points : 6
    Points
    6

    Par défaut

    En fait il n'y a pas de message d'erreur.
    Mais lorsque je met des "put" en fin de pgme pour vérifier que mes tableaux sont bien "chargés", ça ne m'affiche rien.
    Par contre si je met des puts après le "end" du 1er "if" pour tester, il m'affiche les valeurs testées correctement.
    Donc je me dis que si le put ne m'affiche rien en fin de programme c'est qu'il y a truc qui m'échappe.

  16. #16
    Membre confirmé
    Homme Profil pro
    Consultant Finance/Assurance
    Inscrit en
    décembre 2013
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant Finance/Assurance

    Informations forums :
    Inscription : décembre 2013
    Messages : 197
    Points : 634
    Points
    634

    Par défaut

    Pour tester plus facilement tu peux retirer les _TEMPORARY_ au niveau de tes array.
    Comme ça tu auras tes variables dans la table calcul.

    Flo00154

  17. #17
    Futur Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    janvier 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : janvier 2015
    Messages : 27
    Points : 6
    Points
    6

    Par défaut

    Ca ne fonctionne pas.
    Je ne comprend pas ce que je fais pas bien dans ce code.
    Je n'ai pas de message d'erreur, mais après le END du IF il ne se passe rien...
    Par ailleurs LAST_1 et END s'affiche en sortie ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    %MACRO M;
    DATA Tb_SAS.CALCUL (DROP = Age_inc Inc: Age_Sx Sx: );
    /* Déclaration des arrays */
    ARRAY Sx{16:66,0:35} _TEMPORARY_;
    ARRAY Lx_Inc{16:66,0:36} _TEMPORARY_;
    IF _N_ = 1 THEN DO UNTIL (LAST_1 = 1);
    	SET Tb_SAS.Loi_AT; 
    	END=LAST_1;
    	%DO j=0 %TO 36;
    		Lx_inc{Age_inc,&j}=Inc_&j;
    	%END;
    END;
    Put "bonjour";
    SET Tb_SAS.TETES_INCAP;	
    Resultat= Lx_inc{25,2};
    RUN;	
    %MEND;
     
    %M;

  18. #18
    Futur Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    janvier 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : janvier 2015
    Messages : 27
    Points : 6
    Points
    6

    Par défaut

    J'ai trouvé, il y avait un ";" en trop juste avant le "END"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SET Tb_SAS.Loi_AT; 
    	END=LAST_1;

Discussions similaires

  1. Réponses: 6
    Dernier message: 08/08/2017, 09h49
  2. Réponses: 2
    Dernier message: 29/08/2012, 11h05
  3. Tableau et variable globale
    Par Valdu dans le forum BIRT
    Réponses: 2
    Dernier message: 06/04/2009, 08h45
  4. Créer une variable globale de type tableau
    Par beegees dans le forum Débuter
    Réponses: 1
    Dernier message: 27/10/2008, 00h26
  5. [XSLT] Création d'une variable global tableau
    Par mbodjisa dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 03/09/2006, 09h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo