Sujets les plus vus
OUTPUT dans l'etape Data
2 participants
Page 1 sur 1
OUTPUT dans l'etape Data
Bonjour,
j'aimerais à partir d'une étape data produire plusieurs tableaux. Je le fais tout simplement avec l'aide de OUTPUT. Sachant que la table tab contient pres de 11 million d'observations.
exemple:
data tab1 tab2;
set lib.tab;
if signal = A and temps = 2 then output tab1;
else output tab2;
run;
Maintenant ca va se compliquer un peu:
J'ai le tableau suivant: (T designe le temps (en mois), signal = signal généré, Test verifie si le signal est bon)
T signal Test
1 A 1
1 B 0
1 A 0
2 A 1
2 A 1
2 B 0
2 B 1
3 A 0
4 A 0
4 A 1
4 B 0
4 B 1
4 B 1
4 B 1
4 B 1
J'aimerais obtenir au final 2 tableaux qui contenant d'une part le signal A et de l'autre le signal B (le cas Test = 1), tout en calculant pour chacun des temps (T) le nombre de fois que ce signal apparait. Pour résumer j'aimerais obtenir donc
tableau 1
T signal compteur
1 A 1
2 A 2
3 A 0
4 A 1
tableau2
T signal compteur
1 B 0
2 B 1
3 B 0
4 B 4
Merci d'avance.
j'aimerais à partir d'une étape data produire plusieurs tableaux. Je le fais tout simplement avec l'aide de OUTPUT. Sachant que la table tab contient pres de 11 million d'observations.
exemple:
data tab1 tab2;
set lib.tab;
if signal = A and temps = 2 then output tab1;
else output tab2;
run;
Maintenant ca va se compliquer un peu:
J'ai le tableau suivant: (T designe le temps (en mois), signal = signal généré, Test verifie si le signal est bon)
T signal Test
1 A 1
1 B 0
1 A 0
2 A 1
2 A 1
2 B 0
2 B 1
3 A 0
4 A 0
4 A 1
4 B 0
4 B 1
4 B 1
4 B 1
4 B 1
J'aimerais obtenir au final 2 tableaux qui contenant d'une part le signal A et de l'autre le signal B (le cas Test = 1), tout en calculant pour chacun des temps (T) le nombre de fois que ce signal apparait. Pour résumer j'aimerais obtenir donc
tableau 1
T signal compteur
1 A 1
2 A 2
3 A 0
4 A 1
tableau2
T signal compteur
1 B 0
2 B 1
3 B 0
4 B 4
Merci d'avance.
cedsoft- Nombre de messages : 23
Date d'inscription : 01/12/2014
Re: OUTPUT dans l'etape Data
Bonsoir,
tu peux le faire en deux fois à l'aide de proc sql :
Niaboc
tu peux le faire en deux fois à l'aide de proc sql :
- Code:
Proc sql ;
Create table tableau1 as
Select T, signal, sum(test) as compteur
From lib.tab
Where signal=”A”
Group by 1, 2;
Quit;
Proc sql ;
Create table tableau2 as
Select T, signal, sum(test) as compteur
From lib.tab
Where signal=”B”
Group by 1, 2;
Quit;
Niaboc
niaboc- Nombre de messages : 1001
Age : 35
Localisation : Paris
Date d'inscription : 05/05/2008
Re: OUTPUT dans l'etape Data
Slt niaboc,
mais je ne comprend po en fait le Group by 1, 2;
Ca devrait etre en principe Group by T; ou bien?
mais je ne comprend po en fait le Group by 1, 2;
Ca devrait etre en principe Group by T; ou bien?
cedsoft- Nombre de messages : 23
Date d'inscription : 01/12/2014
Re: OUTPUT dans l'etape Data
group by T et signal aussi, même si celui-ci a toujours la même valeur. Mais si tu ne le mets pas, il me semble que SAS ne va pas comprendre qu'il faut agréger les lignes.
niaboc- Nombre de messages : 1001
Age : 35
Localisation : Paris
Date d'inscription : 05/05/2008
Re: OUTPUT dans l'etape Data
ah oki merci
cedsoft- Nombre de messages : 23
Date d'inscription : 01/12/2014
Re: OUTPUT dans l'etape Data
J'aimerais maintenant faire la meme chose, mais avec une 2eme variable Test (noté Test2) qui agit comme Test et dans tableau1 et tableau2 un 2e compteur (noté compteur2). Du moins que Test Test2 compteur et compteur2 soient dans le meme tableau. Comment m'y prendre?
cedsoft- Nombre de messages : 23
Date d'inscription : 01/12/2014
Re: OUTPUT dans l'etape Data
Sinon tu peux également faire une seule table avec toutes tes infos :
Dis-moi si ça te va!
Niaboc
- Code:
proc sql;
create table tableau as
select T, signal, test, test2, sum(test) as compteur, sum(test2) as compteur2
from lib.tab
group by 1, 2
order by 2, 1;
quit;
Dis-moi si ça te va!
Niaboc
niaboc- Nombre de messages : 1001
Age : 35
Localisation : Paris
Date d'inscription : 05/05/2008
Re: OUTPUT dans l'etape Data
Salut Niaboc! Sorry de n'avoir po réagi à temps car j'étais en voyage. Merci infiniment pour ton code car il fonctionne parfaitement .
cedsoft- Nombre de messages : 23
Date d'inscription : 01/12/2014
Re: OUTPUT dans l'etape Data
Ca se complique encore un peu:
J'aimerais maintenant avoir un compteur (noté compteur3) qui pour chaque signal "A" à chaque temps "T" (1,2,3,4) compte plutot le nombre de signaux B ayant la valeur Test = 0 et vice versa (c-a-d pour chaque instant T pour le signal B, compteur3 compte le nombre de signaux A ayant Test = 0 ). J ne sais po si je me suis bien fait comprendre...
J'aimerais maintenant avoir un compteur (noté compteur3) qui pour chaque signal "A" à chaque temps "T" (1,2,3,4) compte plutot le nombre de signaux B ayant la valeur Test = 0 et vice versa (c-a-d pour chaque instant T pour le signal B, compteur3 compte le nombre de signaux A ayant Test = 0 ). J ne sais po si je me suis bien fait comprendre...
cedsoft- Nombre de messages : 23
Date d'inscription : 01/12/2014
Re: OUTPUT dans l'etape Data
Salut,
C'est effectivement plus compliqué... voici le petit bout de code que j'ai pu sortir, il y a certainement moyen de faire plus simple :
Dis-moi si ça fonctionne bien.
Pour les cas ou le signal B n'existe pas pour un temps T (comme pour le temps 3 dans ta petite table d'exemple), ça met un . plutôt qu'un 0.
Niaboc
C'est effectivement plus compliqué... voici le petit bout de code que j'ai pu sortir, il y a certainement moyen de faire plus simple :
- Code:
proc sql;
create table tableau as
select coalesce(a.T, b.T) as t
, coalesce(a.signal, b.signal) as signal
, test
, test2
, sum(test) as compteur
, sum(test2) as compteur2
, b.compteur3 as compteur3
from lib.tab as a
full join (select t
, case when signal="A" then "B"
when signal="B" then "A" end as signal
, sum(case when test=0 then 1 else 0 end) as compteur3
from tab
group by 1, 2) as b
on a.t=b.t and a.signal=b.signal
group by 1, 2
order by 2, 1;
quit;
Dis-moi si ça fonctionne bien.
Pour les cas ou le signal B n'existe pas pour un temps T (comme pour le temps 3 dans ta petite table d'exemple), ça met un . plutôt qu'un 0.
Niaboc
niaboc- Nombre de messages : 1001
Age : 35
Localisation : Paris
Date d'inscription : 05/05/2008
Re: OUTPUT dans l'etape Data
Salut,
ca marche parfaitement
merci bcp. Mais je ne comprends po bien le role de la foncton coalesce. Peux tu m'expliquer stp?
Cedric
ca marche parfaitement

Cedric
cedsoft- Nombre de messages : 23
Date d'inscription : 01/12/2014
Re: OUTPUT dans l'etape Data
Coalesce est une fonction qui te permet de prendre la première valeur non nulle.
Je l'ai mise ici car sinon tu pouvais avoir des "." à la place des temps et signaux, en ne prenant que le a.t et a.signal.
Niaboc
Je l'ai mise ici car sinon tu pouvais avoir des "." à la place des temps et signaux, en ne prenant que le a.t et a.signal.
Niaboc
niaboc- Nombre de messages : 1001
Age : 35
Localisation : Paris
Date d'inscription : 05/05/2008

» Somme suivant la valeur d'un champ dans une data.frame
» MAVOVA; interpretation du output
» Vérification compréhension output Anova mesures répétées
» Problème dans le package ensembleBMA dans R
» Data mining
» MAVOVA; interpretation du output
» Vérification compréhension output Anova mesures répétées
» Problème dans le package ensembleBMA dans R
» Data mining
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|