Bonjour,
Je ne comprends pas bien ce qui ne marche paset ce que tu veux faire. Est ce que tu peux donner plus de détails?
Cordialement
Bonjour,
Je ne comprends pas bien ce qui ne marche paset ce que tu veux faire. Est ce que tu peux donner plus de détails?
Cordialement
Salut, En realité ca me parait tout simple ce que je veux faire^^
Je vais donner un exemple je pense que ce sera plus clair, si j'ai ces données par exemple
Client1 a b
client2 b c
client3 b c
client1 d a
client3 c f
client3 a d
Je voudrais qu'il me créé trois rapports qui se nomme par exemple client 1, client2 et client 3
et dans chacun de ces output je voudrais juste des choses tres simple comme un comptage par exemple donc la
NB de ligne : 2 pour l'output client1
Nb de ligne : 1 pour l'output client2
Nb de ligne : 3 pour l'output client 3.
Mais il me faut absolument des fichiers differents car je ne peux envoyer les informations d'un client a tout le monde...
J'ai un doute: tu veux des données descriptives de type qualitatif ou quantitatif? Qui plus est, dans ton avant dernier, tu parles d'une erreur générée par SAS et tu ne l'indique pas
ah oui desole, la voici
Il me faut principalement des comptages, apres je creerai surement different data, pour realiser ces comptages, mais pour le moment j'arrive meme pas a faire un comptage du nombre de lignes pour chaque client.
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 NOTE: There were 288 observations read from the data set ALZ.CLIENTS. NOTE: DATA statement used (Total process time): real time 0.06 seconds cpu time 0.00 seconds _user_. NOTE: Line generated by the macro variable "CLIENTS1". 14 4dnord000001 ___________ 22 ERROR 22-322: Syntax error, expecting one of the following: !, !!, &, *, **, +, -, /, <, <=, <>, =, >, ><, >=, AND, EQ, GE, GT, IN, LE, LT, MAX, MIN, NE, NG, NL, NOTIN, OR, ^=, |, ||, ~=. NOTE: Character values have been converted to numeric values at the places given by: (Line):(Column). 14:47 NOTE: The SAS System stopped processing this step because of errors. WARNING: The data set ALZ.TEMPORAIRE may be incomplete. When this step was stopped there were 0 observations and 121 variables. WARNING: Data set ALZ.TEMPORAIRE was not replaced because this step was stopped. NOTE: DATA statement used (Total process time): real time 0.29 seconds cpu time 0.01 seconds
essaye ca:
A quoi ca sert de faire un table de fréquence quand tu as seule catégorie(tu riens un client à chaque fois)?
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 %MACRO test2(); DATA _NULL_; SET alz.clients; CALL SYMPUT(COMPRESS("clients"||compress(put(_N_,3.))),client_num); CALL SYMPUT("nb_clients",put(_N_,3.)); run; %put _user_.; %do i=1 %TO &nb_clients.; DATA alz.temporaire; SET alz.bna_travail; IF client_num in ("&&clients&i.") then output; run; proc freq DATA=alz.temporaire; TABLES client_num; run; %end; %MEND test2;
Bonjour,
Si je comprends bien tu veux faire une analyse des fréquence par nom (ou client) tu veux avoir autant de sortie qu'il y a de client.
Je te propose le code suivant qui répond a ce besoin sans utiliser des macro variables, en effet il y a l'option "by" dans la proc freq qui te permet de créer des catégories
out=sortie => te permet de récupérer les résultats dans une table SAS en plus de la la sortie dans l'output.
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 data t; format nom $10. v1 $1. v2 $2.; input nom $ v1 $ v2 $; cards; client1 a b client1 b c client1 b a client1 b b client2 b c client2 a b client2 b c client3 b c client1 a b client3 c f client3 a d ; run; proc sort data=t; by nom;run; proc freq data=t; by nom; tables v1 v2/ out=sortie; run;
Et ouais pas faux! A traersa de se prononcer sur le type d'analyse et les résultats escomptés![]()
ben la proc freq me permet de compter non?
en tout cas ca ca correspond exactement a ce que je veux d'un point de vue resultat affiché, le probleme c'est que quand j'ouvre sortie, j'ai a nouveau tous les clients, vu que je n'ai qu'un fichier de sortie...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 proc sort DATA=t; BY nom;run; proc freq DATA=t; BY nom; TABLES v1 v2/ out=sortie; run;
tu veux compter le nombre de client?
Est ce que tu peux nous envoyer la sortie que tu veux format de la table en te basant sur l'exemple que j'ai fourni?
en fait je ne cherche pas a avoir le resultat dans une table car mes clients n'ont pas sas, mais j'ai vu qu'on pouvait les faire en rtf ou html
pour reprendre ton exemple qui est plus facile a illustrer je voudrais exactement ce que me sors sas, mais avec 3 sortir, une par client
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 The FREQ Procedure nom=client1 v1 Frequency Percent Cumulative Frequency Cumulative Percent a 2 40.00 2 40.00 b 3 60.00 5 100.00 v2 Frequency Percent CumulativeFrequency Cumulative Percent a 1 20.00 1 20.00 b 3 60.00 4 80.00 c 1 20.00 5 100.00
je pense que le code ci-dessous répond à ton problème.
je crée trois fichiers html, chacun contient les résultats pour un client.
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 data t; format nom $10. v1 $1. v2 $2.; input nom $ v1 $ v2 $; cards; client1 a b client1 b c client1 b a client1 b b client2 b c client2 a b client2 b c client3 b c client1 a b client3 c f client3 a d ; run; proc sort data=t out=t_tr(keep=nom) nodupkey; by nom;run; %macro test; data _null_; set t_tr; call symputx('nom'||left(trim(_n_)),nom); call symput('nb',_n_); run; %do i=1 %to &nb; filename fic "c:\&&nom&i...html"; ods listing close; ods html file=fic; proc freq data=t (where=(nom="&&nom&i")); by nom; tables v1 v2; run; ods html close; %end; %mend; %test;
quand je lis ton code, ca ressemble vraiment a ce que je veux faire, du moins la logique semble vraiment bonne, j'ai quelque peu adapté car travaillant en entreprise on a pas accés au c, mais la surprise, il semble pas content parce que le fichier de sortie existe pas, mais ca me semble normal vue que c'est notre fichier resultat, je copie colle quand meme, mais peut etre que ca vient de mon sas...
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76 ;*';*";*/;quit;run; 2 OPTIONS PAGENO=MIN; 3 %LET _CLIENTTASKLABEL=%NRBQUOTE(Code7); 4 %LET _EGTASKLABEL=%NRBQUOTE(Code7); 5 %LET _CLIENTPROJECTNAME=%NRBQUOTE(D:\6002827\Projet22072010.egp); 6 %LET _SASPROGRAMFILE=; 7 8 ODS _ALL_ CLOSE; NOTE: Some of your options or statements may not be supported with the Activex or Java series of devices. Graph defaults for these drivers may be different from other SAS/GRAPH device drivers. For further information, please contact Technical Support. 9 OPTIONS DEV=ACTIVEX; 10 FILENAME EGHTML TEMP; NOTE: Writing HTML(EGHTML) Body file: EGHTML 11 ODS HTML(ID=EGHTML) FILE=EGHTML ENCODING='utf-8' STYLE=EGDefault 11 ! STYLESHEET=(URL="file:///C:/Program%20Files/SAS/Shared%20Files/BIClientStyles/EGDefault.css") 11 ! ATTRIBUTES=("CODEBASE"="http://www2.sas.com/codebase/graph/v91/sasgraph.exe") NOGTITLE NOGFOOTNOTE GPATH=&sasworklocation 11 ! ; 12 13 %gaccessible; 14 %test; NOTE: Numeric values have been converted to character values at the places given by: (Line):(Column). 14:59 14:88 NOTE: There were 3 observations read from the data set ALZ.T_TR. NOTE: DATA statement used (Total process time): real time 0.03 seconds cpu time 0.00 seconds NOTE: Writing HTML Body file: FIC ERROR: Physical file does not exist, D:\6002827\client1.html. WARNING: No body file. HTML output will not be created. NOTE: PROCEDURE FREQ used (Total process time): real time 0.15 seconds cpu time 0.04 seconds NOTE: There were 5 observations read from the data set ALZ.T. WHERE nom='client1'; NOTE: Writing HTML Body file: FIC ERROR: Physical file does not exist, D:\6002827\client2.html. WARNING: No body file. HTML output will not be created. NOTE: PROCEDURE FREQ used (Total process time): real time 0.03 seconds cpu time 0.01 seconds NOTE: There were 3 observations read from the data set ALZ.T. WHERE nom='client2'; NOTE: Writing HTML Body file: FIC ERROR: Physical file does not exist, D:\6002827\client3.html. WARNING: No body file. HTML output will not be created. NOTE: There were 3 observations read from the data set ALZ.T. WHERE nom='client3'; NOTE: PROCEDURE FREQ used (Total process time): 2 The SAS System 11:08 Tuesday, November 16, 2010 real time 0.07 seconds cpu time 0.03 seconds 15 16 %LET _CLIENTTASKLABEL=; 17 %LET _EGTASKLABEL=; 18 %LET _CLIENTPROJECTNAME=; 19 %LET _SASPROGRAMFILE=; 20 21 ;*';*";*/;quit;run; 22 ODS _ALL_ CLOSE; 23 24 25 QUIT; RUN; 26
Pfff... ca tourne en rond. Vu que tu veux un fichier par client c'est mieux de boucler et d'oublier le by dans la proc freq (en faire une par client dans la boucle). On en a déjà parlé au dessus. Après à toi d'adapter l'instruction table à la (aux) bonne(s) variables. Tout simple.
POurquoi tu sauvegardes en html?
Je ne veux pas particulierement du html, mais je pensais que c'etait le mieux vu que je veux que ce soit lisible par des personnes qui n'ont pas SAS. Apres si c'est plus simple en rtf ou autre pourquoi pas...
tu peux le faire tout aussi simplement en rtf ou pdf en utilisant l'ods rtf ou ods pdf
L'erreur ne semble pas due au format de resultat il me met la meme erreur avec l'ods pdf.
c'est bizarre dans l'explorateur de sas il me créé deux fichier client1.pdf et client2.pdf, ainsi qu'un Fic.
Mais ils me marquent tous
le fichier associé a cette vue n'a pu etre localisé.
bon c'est bon j'ai localisée la derniere erreur qu'il resté, en fait vous aviez tout bien fait c'etait de ma faute ^^ L'endroit ou je stockais les macros n'etait pas le meme que l'endroit ou je souhaitais mettre les resultats d'ou un bug au niveau du filename, merci beaucoup pour votre aide, c'est vraiment tres sympa
Partager