Citation Envoyé par PAULOM
Bonjour,

J'aimerais récupérer sur une sélection d'une variable un nombre aléatoire, voici mon code!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
data work.test;
     set work.final;	   
	by numsoc;
select;
when (age eq 4 (obs=3500));
do; ligne='V01'; output work.test; end;
otherwise; end;
run;
Donc en fait quand l'âge = 4 j'en voudrais 3500 observation mais cela ne fonctionne aps.
Et si possible dans un Select.
Merci à vous.
Citation Envoyé par fafabzh6
Bonjour,
Je ne vois pas où ton nombre aléatoire apparaît dans ton code!!
Je ne vois pas trop ce que tu veux dire par :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Donc en fait quand l'âge = 4 j'en voudrais 3500 observation
Citation Envoyé par PAULOM
-->Il apparait ici (obs=3500)
-->Comme résultat pour age=4 j'ai par exemple 400000 observations mais je souhaite en avoir que 3500 et je ne sais pas comment faire!

Merci à toi!
Citation Envoyé par olivier.decourt
Ne serait-ce pas plutôt
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
DATA work.test;
SET work.final (WHERE=(age=4)); 
BY numsoc;
IF first.numSoc then nbPris = 0 ;
nbPris + 1 ;
IF nbPris <= 3500 then output ;
run;
pour en retenir 3500 par valeur de NumSoc ?
Ou
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
DATA work.test;
SET work.final (WHERE=(age=4) obs=3500) ;
run;
pour en retenir 3500 en tout ?
Ou encore
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
proc surveyselect DATA=work.final(WHERE=(age=4))
                     out=work.test
                    sampsize=3500 ;
run ;
pour choisir aléatoirement 3500 obs avec age=4 ? (Ajouter l'instruction STRATA numSoc ; avec un tri préalable selon numSoc pour avoir 3500 obs choisies au hasard par valeur de numSoc.)

Olivier
Citation Envoyé par PAULOM
Merci pour ta réponse, mais j'aimerais conserver le SELECT car:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
when (age eq 3) and ((age eq 4) and (obs=3500));
Ici je souhaite avoir tous les age = 3, et 3500 personne agé de 4 ans.

Il y a plusieurs conditions c'est pour cela!
Citation Envoyé par olivier.decourt
Ce ne sont pas des WHEN (qui sont comme des IF) que tu veux faire, mais des WHERE (qui sont des conditions d'écriture).
Par ailleurs, des conditions séparées par un AND doivent être vraies en même temps (= pour une même observation). Donc age=3 AND age=4, ça ne renvoie personne !
Dernière chose, OBS est une option de table (= on ne peut l'indiquer qu'après le nom d'une table). Donc interdit dans IF, WHEN, WHERE et consorts.
Voilà ce que je te propose :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
DATA work.test;
SET work.final (WHERE=(age=4) OBS=3500)
      work.final (WHERE=(age=3)) ;
RUN ;
Citation Envoyé par PAULOM
Ok merci, mais si je fais ça je top ma ligne comment?
Cette sélection vaut ligne='V01', et biensur j'en ai jusqu'à 'V07'
Et la ligne 'V01' est un reppoussoir de la ligne 'V07' et ainsi de suite
Code : Sélectionner tout - Visualiser dans une fenêtre à part
when (age eq 3) OR ((age eq 4) AND (obs=3500));
Il n'y aurait pas un obs identique pour les When/Where?
Citation Envoyé par green_fr
Question : tu ne voulais pas prendre les 3500 enregistrements aléatoires ? Parce que la solutions que vous êtes en train de fabriquer donnera les 3500 premiers enregistrements.