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 03/08/2008, 03h09   #1
Candidat au titre de Membre du Club
 
Inscription : avril 2008
Messages : 18
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 18
Points : 10
Points : 10
Par défaut charger une variable en fonction de deux autres.

Bonjour à tous! Je vous remercie d'avance pour toute aide.
J'ai une table qui se presente comme suit;

v1 v2 v3
1 1 1
2 . 1
2 . 2
3 4 5
3 4 4
3 . 6

etc... J'ai au total 52000 observations

Je dois remplacer les valeurs manquantes de var2 avec la plus petite observation de var3 en fonction de var1. En realité v2 et v3 sont des dates et v1 represente des objets.

comme resultat je dois avoir ceci:

v1 v2 v3
1 1 1
2 1 1
2 1 2
3 4 5
3 4 4
3 4 6
b.barry est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2008, 22h08   #2
Candidat au titre de Membre du Club
 
Inscription : avril 2008
Messages : 18
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 18
Points : 10
Points : 10
Bonjour.
J'ai pu trouver la solution ci-dessous. Cependant, j'aurais voulu operer sur la même table sans avoir à creer une nouvelle.


Code :
1
2
3
4
5
6
7
proc sql;
CREATE TABLE tab1 AS SELECT t.*, min(var3) FROM tab0 t GROUP BY var1;
quit;
DATA tab1;
SET tab1;
IF var2 eq . then var2=var3;
run;
b.barry est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2008, 14h14   #3
Membre confirmé
 
Inscription : avril 2008
Messages : 233
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : avril 2008
Messages : 233
Points : 216
Points : 216
Avec SQL tu peux imbriquer les requêtes :

Code :
1
2
3
4
5
6
7
8
9
10
proc sql;
CREATE TABLE TAB AS
SELECT a.VAR1,
 coalesce(a.VAR2, b.VAR3) AS VAR2,
 a.VAR3
FROM TAB a
 INNER JOIN (SELECT VAR1, min(VAR3) AS VAR3 FROM TAB GROUP BY VAR1) b
 ON a.VAR1 = b.VAR1
;
quit;
green_fr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2008, 22h36   #4
Candidat au titre de Membre du Club
 
Inscription : avril 2008
Messages : 18
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 18
Points : 10
Points : 10
Citation:
Envoyé par green_fr Voir le message
Avec SQL tu peux imbriquer les requêtes :

Code :
1
2
3
4
5
6
7
8
9
10
proc sql;
CREATE TABLE TAB AS
SELECT a.VAR1,
 coalesce(a.VAR2, b.VAR3) AS VAR2,
 a.VAR3
FROM TAB a
 INNER JOIN (SELECT VAR1, min(VAR3) AS VAR3 FROM TAB GROUP BY VAR1) b
 ON a.VAR1 = b.VAR1
;
quit;

Merci beaucoup. C'est simpa! come ca je n'ai plus bésoin de creer extra une table.
b.barry est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h45.


 
 
 
 
Partenaires

Hébergement Web