Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > SAS > SAS Base
SAS Base Forum d'entraide sur SAS base : étape data, procédures non statistiques, procédures non graphiques, SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/11/2011, 16h06   #1
Candidat au titre de Membre du Club
 
Femme
Étudiant
Inscription : novembre 2011
Messages : 40
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Alimentation

Informations forums :
Inscription : novembre 2011
Messages : 40
Points : 13
Points : 13
Par défaut Ajouter des observations à une table

Bonjour,

Voici mon problème :

Soit une table A1 à laquelle j'applique le code suivant :
Code :
1
2
3
4
5
DATA bloc A2;
SET A1;
	IF var1 = 0 THEN OUTPUT bloc;
	ELSE OUTPUT A2;
RUN;
Je voudrais maintenant réaliser la même opération sur une table B1 en utilisant une nouvelle fois la table "bloc".
Code :
1
2
3
4
5
DATA bloc B2;
SET B1;
	IF var1 = 0 THEN OUTPUT bloc;
	ELSE OUTPUT B2;
RUN;
Lorsque je lance le code ci-dessus, les observations déjà présentes dans la table "bloc" sont écrasées et remplacées par les nouvelles alors que je voudrais simplement ajouter celles-ci dans la table.

Est-ce faisable et si oui, comment ?

Merci !
Hélixe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 16h11   #2
Membre Expert
 
Inscription : mars 2005
Messages : 1 011
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 011
Points : 1 259
Points : 1 259
Envoyer un message via Yahoo à bahraoui
tu écrases le contenu de la table bloc dans la deuxième étape.
Tu peux créer bloc1 dans la 1 ére étape data et bloc2 dans la deuxième étape data.
Et à la fin tu fais un set de bloc1 et bloc2 dans bloc
__________________
Consultez les FAQs et les anciens postes avant de poser vos questions. Merci
bahraoui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 16h20   #3
Candidat au titre de Membre du Club
 
Femme
Étudiant
Inscription : novembre 2011
Messages : 40
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Alimentation

Informations forums :
Inscription : novembre 2011
Messages : 40
Points : 13
Points : 13
Oui, c'est justement ce que je voudrais éviter car j'ai beaucoup de tables à traiter de cette façon et j'aurai aimé compiler directement les observations dans ma table de sortie.

Voilà pourquoi je me renseigne pour savoir s'il n'existe pas une fonction/instruction/option en particulier qui puisse m'aider.
Hélixe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 16h34   #4
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 012
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : février 2011
Messages : 1 012
Points : 1 717
Points : 1 717
impossible avec cette demarche. car SAS ecrasera les données de la table bloc remplacera à chaque fois la table bloc par la nouvelle table bloc.
L'idée de bahraoui semple convenir.
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 16h46   #5
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 957
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 957
Points : 1 368
Points : 1 368
Une proc Datasets ne sait pas faire ça
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 17h03   #6
Membre Expert
 
Inscription : mars 2005
Messages : 1 011
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 011
Points : 1 259
Points : 1 259
Envoyer un message via Yahoo à bahraoui
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
DATA bloc1 A2;
SET A1;
	IF var1 = 0 THEN OUTPUT bloc1;
	ELSE OUTPUT A2;
RUN;
DATA bloc2 B2;
SET B1;
	IF var1 = 0 THEN OUTPUT bloc2;
	ELSE OUTPUT B2;
RUN;
DATA bloc; SET bloc1 bloc2;
run;
__________________
Consultez les FAQs et les anciens postes avant de poser vos questions. Merci
bahraoui est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 22/11/2011, 17h12   #7
Membre éclairé
 
Homme
statisticien
Inscription : mai 2011
Messages : 213
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : statisticien
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : mai 2011
Messages : 213
Points : 319
Points : 319
Il y a peut-être des choses à faire si on peut trouver une indexation "naturelle" de tes tables A1 , A2 , etc...

Elles sont numérotées de A1 à An ? Stockées seules dans le même répertoire et/ou se distinguant par un préfixe déterminé ?

Edit : Et si ton "n" n'est pas trop grand (solution macro)
jerome_pdv2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 17h14   #8
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 012
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : février 2011
Messages : 1 012
Points : 1 717
Points : 1 717
moi je dirai ,s'elle a besoin juste de la table bloc, le plus simple et le plus court c'est de passer par les jointures SQL. !!!
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 17h29   #9
Candidat au titre de Membre du Club
 
Femme
Étudiant
Inscription : novembre 2011
Messages : 40
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Alimentation

Informations forums :
Inscription : novembre 2011
Messages : 40
Points : 13
Points : 13
D'accord, merci à tous.

J'aurais au moins trouvé UNE chose que SAS ne peut pas faire (de la manière dont je le voudrais) !
Je vais opter pour une concaténation des tables avec un SET.

Bonne soirée,
Hélixe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 10h21   #10
Expert Confirmé
 
Avatar de olivier.decourt
 
Homme Olivier Decourt
Formateur en informatique
Inscription : avril 2008
Messages : 1 467
Détails du profil
Informations personnelles :
Nom : Homme Olivier Decourt
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Formateur en informatique
Secteur : Conseil

Informations forums :
Inscription : avril 2008
Messages : 1 467
Points : 2 828
Points : 2 828
Bonjour.
Je pense qu'on peut quand même mettre à jour les données de ta table BLOC, à condition de la relire.
Code :
1
2
3
4
5
6
7
8
9
10
DATA work.res1 work.beds ;
  SET sashelp.prdsale ;
  IF product = "BED" THEN OUTPUT work.beds ;
  ELSE OUTPUT work.res1 ;
RUN ;
DATA work.res2 work.beds ;
  SET sashelp.prdsal2 work.beds (IN=old) ;
  IF product = "BED" OR old THEN OUTPUT work.beds ;
  ELSE OUTPUT work.res2 ;
RUN ;
Dans cet exemple, la table BEDS joue le rôle de BLOC pour toi.

Est-ce que ça répond au problème ?
Olivier
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 16h14   #11
Candidat au titre de Membre du Club
 
Femme
Étudiant
Inscription : novembre 2011
Messages : 40
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Alimentation

Informations forums :
Inscription : novembre 2011
Messages : 40
Points : 13
Points : 13
Exactement !!!
Merci beaucoup.
Hélixe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 16h40   #12
Membre expérimenté
 
Inscription : avril 2009
Messages : 538
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 538
Points : 541
Points : 541
Lut,

Je pense avoir une solution avec modify :

Code :
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
 
DATA BLOC A2;
   SET SASHELP.CLASS(keep=NAME SEX AGE);
   NAME = 'BLOC';
   AGE = 0;
   IF SEX = 'M' then output BLOC;
                else output A2;
run;
 
DATA B1;
   SET SASHELP.CLASS(keep=NAME SEX AGE);
   AGE = 2229;
   NAME = 'B1';
run;
 
DATA BLOC B2;
   SET B1(RENAME=(NAME=NAMEnew SEX=SEXnew AGE=AGEnew));
   keep NAME SEX AGE;
   MODIFY BLOC; 
   IF SEXnew = 'M' then do;
      NAME=NAMEnew; SEX=SEXnew; AGE=AGEnew; 
      output BLOC;
   end;
   else do; 
      NAME=NAMEnew; SEX=SEXnew; AGE=AGEnew; 
      output B2;
   end;
run;


X
xav2229 est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h22.


 
 
 
 
Partenaires

Hébergement Web