Bonjour,
Sur une liste de 100 dossiers, je dois en numéroter (en marquer) 10 au hasard dans un colonne calculée.
Avez-vous une solution ?
D'avance merci pour votre aide.
Bonjour,
Sur une liste de 100 dossiers, je dois en numéroter (en marquer) 10 au hasard dans un colonne calculée.
Avez-vous une solution ?
D'avance merci pour votre aide.
Hello,
Regarde du coté de la procédure surveyselect et l'option SAMPSIZE=10 ou l'option N=10 . Il existe des exemples dans les forums SAS.
N'oubliez pas de consulter les FAQ SAS et les cours et tutoriels SAS
N'oubliez pas de mettre votre message à si la solution donnée résout votre problème
tu as dans EG la tâche "Random Sample" ou "Echantillonnage" qui est l'assistant de la proc SurveySelect ; tu y retrouveras les options.
Pour la Colonne Calculée je ferai un CASE WHEN avec l'éditeur d'expression avancée. il consiste à générer le ranuni et avec un autre JOIN tu fais une somme cumulative puis tu finis la requête avec un HAVING pour filtrer.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 GOPTIONS ACCESSIBLE; %_eg_conditional_dropds(WORK.CLASS2); PROC SQL; CREATE TABLE WORK.CLASS2 AS SELECT t1.Name, t1.Sex, t1.Age, t1.Height, t1.Weight, /* choix */ (case when int(ranuni(10) *100) < 50 then 1 else 0 end) AS choix FROM SASHELP.CLASS t1 ORDER BY t1.Name; QUIT; GOPTIONS NOACCESSIBLE; %LET _CLIENTTASKLABEL=; %LET _CLIENTPROJECTPATH=; %LET _CLIENTPROJECTNAME=; %LET _CLIENTTASKLABEL='Query Builder1'; %LET _CLIENTPROJECTPATH=''; %LET _CLIENTPROJECTNAME=''; GOPTIONS ACCESSIBLE; %_eg_conditional_dropds(WORK.QUERY_FOR_CLASS2); PROC SQL; CREATE TABLE WORK.QUERY_FOR_CLASS2 AS SELECT DISTINCT t1.Name, t1.Sex, t1.Age, t1.Height, t1.Weight, t1.choix, /* SUM_of_choix */ (SUM(t2.choix)) AS SUM_of_choix FROM WORK.CLASS2 t1 INNER JOIN WORK.CLASS2 t2 ON (t1.Name >= t2.Name) GROUP BY t1.Name, t1.choix HAVING (CALCULATED SUM_of_choix) <= 5; QUIT; GOPTIONS NOACCESSIBLE;
N'oubliez pas de cliquer sur lorsque votre problème est réglé !
Super et merci, j'avance.
Le case when est bien je dois l'adapter à ma requête.
Dans un premier test je récupère 14 lignes.
En fait j'ai un nombre de dossiers par mois qui n'est jamais le même.
J'ai donc fait en amont un monotonic sur les dossiers du mois.
Ensuite, voici mon case when :
case
when Période Entrée =Période analyse and int(ranuni(10) *max(Monotonic )) < 10 then 1
else 0
end
Résultats 14 dossiers
Je viens d'essayer sur un autre fichier avec 25 dossiers et ça ne fonctionne pas
Je viens de trouver dans les outils de SAS GUIDE l'échantillon aléatoire qui répond presque que parfaitement à mes besoins
Il me reste plus qu'à trouver une solution pour que le filtre sur la période prenne la colonne "Période" de ma requête.
C'est possible ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 /* ------------------------------------------------------------------- Code généré par une tâche SAS Généré le : mercredi 30 juillet 2014 à 13:22:02 Par tâche : Echantillon aléatoire Données en entrée : SASApp:WORK.SUIVI_2 Serveur : SASApp ------------------------------------------------------------------- */ TITLE; FOOTNOTE; %LET _CLIENTTASKFILTER = 'Période Entrée TINFODSS'n = 201407; (à remplacer par &Période) PROC SURVEYSELECT DATA=WORK.SUIVI_2( WHERE=('Période Entrée TINFODSS'n = 201407)) (à remplacer par &Période) OUT=WORK.RANDRandomSampleSUIVI_DES_HUI METHOD=SRS N=10 NOPRINT; RUN; QUIT; %SYMDEL _CLIENTTASKFILTER;
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager