IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

SAS IML Discussion :

[IML] Proc Iml avec SAS de base


Sujet :

SAS IML

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2008
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 29
    Points : 23
    Points
    23
    Par défaut [IML] Proc Iml avec SAS de base
    Bonjour,

    J'ai utilisé une proc iml pour transformer une bd SAS en matrice afin de faire un traitement. Voici un extrait de mon code:

    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
    proc iml;
    use modele_affaires; /* bd SAS à transformer en matrice */
    read all var {Xi Xj Yi} into DA; /* matrice DA avec trois variables */
    close modele_affaires; /* Fermeture de la bd SAS */
    nkt = 0; 
    Skt = 0;
     
    do k = 1 to 2688; 
    do t = (k + 1) to 2689; 
     if (DA[k,1] < DA[t,1] and DA[k,3] < DA[t,3]) then do;                    					                  Ckt = 1;            
       			                               nkt = nkt + 1;        
       				                  Skt = Skt + Ckt; 			 			   end;
           else if (DA[k,1] > DA[t,1] and DA[k,3] < DA[t,3]) then do;
     						Ckt = -1;								nkt = nkt + 1; 	  			                                      Skt = Skt + Ckt; 	 
                                                                                end;
           else if (DA[k,1] = DA[t,1] and DA[k,3] < DA[t,3]) then do;
      				                        Ckt = 0;		                                                               nkt = nkt + 1; 
                                                                                end;
    	  else Ckt = 0;     
    end;
    end; 
    H = Skt/nkt;
    print H;
    quit;

    J'ai remarqué que chaque "do", "if" et "else" est en rouge (pour moi il y a une erreur mais je ne la vois pas)
    Ensuite voici ce que j'obtiens de la log:

    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
    if (DA[k,1] < DA[t,1] and DA[k,3] < DA[t,3]) then do;
                                     ---
                                     22
                                     76
    ERREUR 22-322: Erreur de syntaxe ; syntaxe requise : #, ##, &, (|, ), *, **, +, -, /, //, :, <, <=, <>, =, >, ><, >=, @, [, ^=, `, |, ||.
    ERREUR 76-322: Erreur de syntaxe ; l'instruction sera ignorée.
     
     else if (DA[k,1] > DA[t,1] and DA[k,3] < DA[t,3]) then do;
                                           ---
                                           22
                                           76
    ERREUR 22-322: Erreur de syntaxe ; syntaxe requise : #, ##, &, (|, ), *, **, +, -, /, //, :, <, <=, <>, =, >, ><, >=, @, [, ^=, `, |, ||.
    ERREUR 76-322: Erreur de syntaxe ; l'instruction sera ignorée.
     
    ERREUR: END does not occur within DO group at line=90 col=65.
    91          else if (DA[k,1] = DA[t,1] and DA[k,3] < DA[t,3]) then do;
                                           ---
                                           22
                                           76
    ERREUR 22-322: Erreur de syntaxe ; syntaxe requise : #, ##, &, (|, ), *, **, +, -, /, //, :, <, <=, <>, =, >, ><, >=, @, [, ^=, `, |, ||.
    ERREUR 76-322: Erreur de syntaxe ; l'instruction sera ignorée.
     
    ERREUR: END does not occur within DO group at line=94 col=65.

    Merci pour votre aide.

  2. #2
    Membre chevronné
    Homme Profil pro
    Biostatisticien
    Inscrit en
    Juin 2009
    Messages
    1 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 206
    Points : 1 868
    Points
    1 868
    Par défaut
    Bonjour, proc iml n'est pas dans la version "de base" de sas, il faut une licence particuliere. Tu peux controler si tu as cette licence en utilisant la proc setinit.

  3. #3
    Membre habitué

    Homme Profil pro
    Consultant Support Client SAS
    Inscrit en
    Mai 2011
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Support Client SAS
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 94
    Points : 180
    Points
    180
    Par défaut
    Si tu essayes de rajouter des parenthèses (en rouge ci-dessous) entre chaque condition de la clause IF cela devrait fonctionner. Les opérateurs AND ne sont pas compris par SAS, il faut écrire du genre &

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (DA[k,1] < DA[t,1]) & (DA[k,3] < DA[t,3])

Discussions similaires

  1. Proc IML et boucle avec DO %end
    Par sam2510 dans le forum SAS IML
    Réponses: 1
    Dernier message: 19/04/2015, 12h56
  2. PROC IML SAS boucles DO
    Par salim514 dans le forum SAS IML
    Réponses: 1
    Dernier message: 15/04/2013, 11h55
  3. Proc tobit avec SAS 9.1
    Par id301077 dans le forum SAS STAT
    Réponses: 0
    Dernier message: 15/09/2009, 17h15
  4. SAS IML ( proc IML)
    Par id301077 dans le forum SAS IML
    Réponses: 1
    Dernier message: 21/01/2009, 18h35
  5. proc IML (langage matriciel sous sas)
    Par Abdeltif_esa dans le forum SAS IML
    Réponses: 0
    Dernier message: 20/11/2008, 23h57

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