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 Base Discussion :

lecture d'une table SAS et traitements différents


Sujet :

SAS Base

  1. #1
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 175
    Par défaut lecture d'une table SAS et traitements différents
    Un exemple concret :
    voici la table SAS T que je lis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ID1   ID2  dernoi  V1   V2   V3   V4  V5
    1      2     1  
    1      3     2
    1      4     3 
    2      1     2
    2      2     3
    2      3     0
    Je dois ensuite mettre à jour pour chaque enregistrement de cette table SAS T comme suivant :
    Si dernoi = 0, je ne fais rien
    Si dernoi = 1, je mets à jour V1
    Si dernoir = 2, je mets à jour V1, V2
    Si dernoi = 3, je mets à jour V1,V2,V3
    Si dernoi = 4, je mets à jour V1,V2,V3,V4
    etc....
    Pour mettre à jour V1, V2, ..., je récupère à l'aide de requêtes SQL les données à partir d'une table Oracle O :

    exemple table O :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    ID1    ID2   NOI   V
    1       2     1    A
    1       3     1    A
    1       3     2    B
    1       4     1    C
    1       4     2    D
    1       4     3    E
    2       1     1    A
    2       1     2    B
    2       2     1    C
    2       2     2    F
    2       2     3    G
    On doit donc obtenir la table T mise à jour de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ID1   ID2  dernoi  V1   V2   V3   V4  V5
    1      2     1     A 
    1      3     2     A    B
    1      4     3     C    D    E 
    2      1     2     A    B
    2      2     3     C    F    G 
    2      3     0
    Merci pour votre aide

  2. #2
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    Avril 2008
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Par défaut
    Je ne comprends pas à quoi te sert la variable DERNOI, puisqu'on arrive à la solution sans s'en servir...
    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
    DATA work.t ;
    	INFILE CARDS MISSOVER ;
    	INPUT ID1   ID2  dernoi  (V1-V5) ($) ;
    CARDS ;
    1      2     1  
    1      3     2
    1      4     3 
    2      1     2
    2      2     3
    2      3     0
    ;
    RUN ;
    DATA work.o ;
    	INPUT ID1    ID2   NOI   V $ ;
    CARDS ;
    1       2     1    A
    1       3     1    A
    1       3     2    B
    1       4     1    C
    1       4     2    D
    1       4     3    E
    2       1     1    A
    2       1     2    B
    2       2     1    C
    2       2     2    F
    2       2     3    G
    ;
    RUN ;
    DATA work.o ;
    	SET work.o ;
    	nomVar = COMPRESS("V"!!noi) ;
    RUN ;
    PROC TRANSPOSE DATA=work.o OUT=work.oBis (DROP=_name_) ;
    	VAR v ;
    	ID nomVar ;
    	BY id1 id2 ;
    RUN ;
    DATA work.tFinal ;
    	MERGE work.t work.oBis ;
    	BY id1 id2 ;
    RUN ;
    Olivier

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Avril 2008
    Messages
    233
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 233
    Par défaut
    Je comprends bien que "dernoi" sert à déterminer la dernière colonne qu'il faut mettre à jour ? C'est à dire même si on avait une ligne "1 2 2 Z" dans la deuxième table, il fallait pas en tenir compte dans la mis à jour de la première ligne, vu que dernoi y est égale à 1. C'est bien ça ?

  4. #4
    Membre émérite
    Avatar de steelspirit
    Homme Profil pro
    SAS discute
    Inscrit en
    Janvier 2008
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SAS discute
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 472
    Par défaut
    Merci Marti pour ce cas d'école

    Et pourquoi ne pas utiliser une seule étape data ?

    Souvent méconnu, les tableaux sont pourtant d'un grand secrours !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    data T(drop=V i);
    	set o;
    	by ID1 ID2 ;
    	ARRAY tab{5} $ V1-V5;
    	retain tab;
    	if first.ID2 then do;
    		do i=1 to dim(tab);
    			tab(i)='';
    		end;
    	end;
    	tab(NOI)=V;
    	if last.ID2;
    run;

Discussions similaires

  1. Accès simultanés : bloquer la lecture d'une table
    Par rohstev dans le forum Access
    Réponses: 12
    Dernier message: 01/02/2008, 20h04
  2. [Mysql] Dump d'une table sous un nom différent
    Par devoo dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 15/09/2006, 16h58
  3. [VB + ADO]Probléme de lecture d'une table
    Par FlynuxS dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 06/06/2006, 10h58
  4. Réponses: 2
    Dernier message: 16/05/2006, 14h17
  5. Lecture d'une table html
    Par kodo dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 15/05/2006, 13h51

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