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 30/12/2010, 17h18   #1
Invité de passage
 
Inscription : décembre 2010
Messages : 2
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 2
Points : 0
Points : 0
Par défaut Compteur sous SAS

Bonjour,

j'aimerais construire la variable compteur comme suit..

Client Produit Compteur
A 1 1
B 1 1
B 2 1
C 1 1
C 1 2
C 2 1

En gros le compteur est toujours égal à 1 sauf quand pour un même client, il y a des produits identiques (dans ce cas, je décompte).
J'ai essayé plusieurs codes et je n'arrive jamais à obtenir vraiment ce que je veux
Merci d'avance
sydster est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2010, 09h34   #2
Membre éclairé
 
Avatar de Filippo
 
Homme Philippe
Statisticien
Inscription : mai 2004
Messages : 654
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Âge : 38
Localisation : France, Eure (Haute Normandie)

Informations professionnelles :
Activité : Statisticien

Informations forums :
Inscription : mai 2004
Messages : 654
Points : 396
Points : 396
Bonjour,
Dans un premier temps il faut trier la table par Client et par produit. Dans l'exemple ça ne sert à rien car la table est construite déjà triée mais pour une table quelconque il faut la trier.

On peut ensuite utiliser un retain pour gérer Compteur à partir de 1 et pouvoir l'incrémenter d'un enregistrement au suivant.

Enfin, le mot-clé first, permet de repérer la première occurence d'un enregistrement. Ainsi pClient vaudra 1 pour la première occurence de Client, 0 pour les suivantes.

Pour un client donné, pProduit vaudra 1 pour la première occurence du produit, 0 pour les suivantes.

J'ai ajouté des enregistrements à la table pour qu'on voie le compteur aller jusqu'à 3.

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
29
30
31
DATA MyTable;
	input Client $ Produit;
	Cards;
		A 1
		B 1
		B 2
		C 1
		C 1
		C 2
		C 2
		C 2
	;
run;
 
proc sort DATA=MyTable;
	BY Client Produit;
run;
 
DATA MyTable;
	SET MyTable;
	retain Compteur 1;
 
	BY Client Produit;
 
	pClient=first.Client;
	pProduit=first.Produit;
 
	IF pClient eq 1 then Compteur=1;
	IF pClient eq 0 AND pProduit eq 1 then Compteur=1;
	IF pClient eq 0 AND pProduit eq 0 then Compteur=Compteur+1;
run;
__________________
"Le sage ne dit pas ce qu'il sait alors que le sot ne sait pas ce qu'il dit"
Filippo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2010, 10h53   #3
Membre expérimenté
 
Inscription : avril 2009
Messages : 537
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 537
Points : 540
Points : 540
sydster tu en fais quoi de ce compteur après? parce que la après pour moi il ne te sert a rien...
xav2229 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 15h50.


 
 
 
 
Partenaires

Hébergement Web