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 29/01/2012, 14h21   #1
Invité de passage
 
Katy Faye Camara
Inscription : avril 2010
Messages : 29
Détails du profil
Informations personnelles :
Nom : Katy Faye Camara

Informations forums :
Inscription : avril 2010
Messages : 29
Points : 3
Points : 3
Par défaut proc sql + if

Bonjour
j'aimerai savoir s'il est possible d'associer une proc sql avec un if. Je m'explique. J'ai 2 tables dont la première contient mes paramètres et la deuxième contient des series expirés. Mes tables se présentent comme suit:

1. Param
index series 3y5y 3y7y 3y10 5y7y 5y10
Eur 8 10 45 60 20 22
Eur 7 19 49 65 23 25
Eur 6 15 55 70 26 20
Eur 5 20 60 75 29 30


2. expired

index series tenor
Eur 5 3y
Eur 5 5y
Eur 6 3y
Eur 7 5y

Mon objectif est de verifié dans la table expired et que si une serie est expiré alors de mettre à vide les valeurs impactés dans la Param.

index series 3y5y 3y7y 3y10 5y7y 5y10
Eur 8 10 45 60 20 22
Eur 7 19 49 65 . .
Eur 6 . . . 26 20
Eur 5 . . . 29 30


J'ai pensé à associé sql et if mais cela ne semble pas marché.


Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
PROC SQL;
 
 CREATE TABLE tt3 AS
 
 SELECT a.*,
 IF a.series=b.series  AND b.tenor='3Y' THEN a.Eur3Y5Y=. AND a.Eur3Y7Y=. AND a.Eur3Y10Y=.
  IF a.series=b.series 1 AND b.tenor='5Y' THEN a.Eur5Y7Y=. AND a.Eur5Y10Y=. 
 
           FROM param  AS a, Expired AS B
 
      ;QUIT;
quelqu 'un a t-il idée.

merci
katypati est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2012, 14h44   #2
Expert Confirmé
 
Avatar de olivier.decourt
 
Homme Olivier Decourt
Formateur en informatique
Inscription : avril 2008
Messages : 1 470
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 470
Points : 2 832
Points : 2 832
Bonjour.
La syntaxe IF THEN ELSE n'existe pas en SQL. Il y a une syntaxe CASE WHEN ELSE END pour les formules conditionnelles mais dans ton cas ce serait un peu long à écrire.
Pourquoi pas une étape DATA avec un MERGE BY et des IF THEN ELSE ?
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2012, 20h34   #3
Invité de passage
 
Katy Faye Camara
Inscription : avril 2010
Messages : 29
Détails du profil
Informations personnelles :
Nom : Katy Faye Camara

Informations forums :
Inscription : avril 2010
Messages : 29
Points : 3
Points : 3
Par défaut proc sql + if

Bonjour,

J'ai aussi pensé à une étape data avec un merge. mais j'ai un peu de mal à la conceptualisé pour le moment.
katypati est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2012, 22h32   #4
Invité de passage
 
Katy Faye Camara
Inscription : avril 2010
Messages : 29
Détails du profil
Informations personnelles :
Nom : Katy Faye Camara

Informations forums :
Inscription : avril 2010
Messages : 29
Points : 3
Points : 3
Par défaut proc sql + if

j'ai pensé à faire un merge par series.

Code :
1
2
3
4
5
6
7
8
 
proc sort DATA=param ; BY series;
proc sort DATA=expired; BY series;
DATA tt; 
merge param (IN=a) expired (IN=b); 
BY series;
IF a;
run;
la table obtenu en sorti ne me est un peu compliqué.
j'obtiens deux blocs séparé. dans le premier bloc j'ai les information sur la table expired et dans le deuxième j'ai les informations de la table param. Du coup c'est pas possible de faire le lien entre les deux.

Faut que je m'y prenne autrement.
Je pensais qu'une proc sql est plus facile.
katypati est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 10h43   #5
Membre expérimenté
 
Inscription : avril 2009
Messages : 538
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 538
Points : 541
Points : 541
il y a les fonctions IFC et IFN qui peuvent etre mises dans du SQL.

Code :
1
2
3
4
5
6
7
 
proc sql;
   CREATE TABLE WORK.ZZ AS
   SELECT ifc(mod(monotonic(), 2), 'OUI', 'NON') AS TEST 
   FROM SASHELP.CLASS
   ;
quit;
X
xav2229 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 30/01/2012, 16h02   #6
Invité de passage
 
Katy Faye Camara
Inscription : avril 2010
Messages : 29
Détails du profil
Informations personnelles :
Nom : Katy Faye Camara

Informations forums :
Inscription : avril 2010
Messages : 29
Points : 3
Points : 3
Par défaut proc sql + if

Merci Xav pour le tuyau

j'ai essayé de l'exploiter en faisant :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
PROC SQL;
 
	CREATE TABLE	ttbis AS
	SELECT DISTINCT a.*,MAX(IFN(a.INDEX=b.family AND a.series=b.series AND b.top_expi=1 AND b.tenor='3Y',1,0)) AS top_3Y,
						MAX(IFN(a.INDEX=b.family AND a.series=b.series AND b.top_expi=1 AND b.tenor='5Y',1,0)) AS top_5Y,
						MAX(IFN(a.INDEX=b.family AND a.series=b.series AND b.top_expi=1 AND b.tenor='7Y',1,0)) AS top_7Y
	FROM param AS a, Expired AS B
	GROUP BY a.series
	ORDER BY a.series DESC
 
 
	;QUIT;
Du coup j'ai une table avec des top et je n'ai plus qu'à faire une data set avec des if pour avoir ma table fianle.

Merci à tous.
katypati est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h51.


 
 
 
 
Partenaires

Hébergement Web