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
| proc sql noprint;
*SELECT DISTINCT substr(sdeliverycode,1,3)||substr(sdeliverycode,25,5) INTO :listtab separated BY " "
FROM nouveaufichier1 ---> t'aurai pu le créer en bas avec une concatination mde macro variable dans le call symput;
CREATE TABLE listtab AS
SELECT DISTINCT substr(sdeliverycode,1,3)||substr(sdeliverycode,25,5) AS code
FROM nouveaufichier1;
quit;
%macro manageoutput;
DATA _null_;
SET listtab;
call symput("code"||compress(put(_n_,3.)), code);
call symput("nbcode",put(_n_,3.));
run;
%do i=1 %TO &nbcode.;
*DATA &listtab ; *---> ici tu écrases la table à chaque fois et tu ne gardes que la dénrière;
DATA listtab&i; *----> peut être c'est ce que tu voulais faire?;
SET nouveaufichier1;
IF substr(sdeliverycode,1,3)||substr(sdeliverycode,25,5)="&&code&i." then output &&code&i.;
run;
PROC SQL;
CREATE TABLE sommetable&i. AS SELECT SUM(itodeliver) AS itodeliver,
SUM(iprocessed) AS iprocessed,
SUM(isuccess) AS isuccess,
((SUM(isuccess)/SUM(iprocessed))*100) AS successpourcent,
SUM(irecipientopen) AS irecipientopen,
((SUM(irecipientopen)/SUM(isuccess))*100) AS ouverturespourcent,
SUM(itotalrecipientopen) AS itotalrecipientopen,
SUM(ioptout) AS ioptout,
((SUM(ioptout)/SUM(isuccess))*100) AS desinscriptionspourcent,
SUM(ipersonclick) AS ipersonclick,
((SUM(ipersonclick)/SUM(isuccess))*100) AS clicsdistinctspourcent,
SUM(itotalrecipientclick) AS itotalrecipientclick,
((SUM(ipersonclick)/SUM(irecipientopen))*100) AS reactivite,
SUM(ireject) AS ireject,
SUM(inewquarantine) AS inewquarantine,
((SUM(inewquarantine)/SUM(isuccess))*100) AS quarantainepourcent,
SUM(imirrorpage) AS imirrorpage,
((SUM(imirrorpage)/SUM(isuccess))*100) AS mirroirpourcent,
SUM(iforward) AS iforward,
((SUM(iforward)/SUM(isuccess))*100) AS transfertspourcent
/*FROM table; *tu crées une 30aines de tables de la même table source c'est quoi l'intêret?
puisqu'il n'y a pas de condition ( filtre? ) ;*/
From &&tab&i; *??;
QUIT;
DATA tableauavecsommetable&i;
SET table sommetable&i;
IF sdeliverycode="" then sdeliverycode="Totaux";
run;
%end;
%mend manageoutput;
%manageoutput; |
Partager