%MACRO bootstrap_percentile (table, nbBoucles=100, alpha=0.05, Log=non) ; %IF &log = non %THEN %DO ; OPTION NOMPRINT NOMLOGIC NOSYMBOLGEN NONOTES ; %END ; DATA work._travail ; SET &table ; _index_ = _N_ ; RUN ; %GLOBAL vrai ; %calcul (work._travail, outMV = vrai, poids =) ; %DO i = 1 %TO &nbBoucles ; PROC SURVEYSELECT DATA = work._travail OUT = work._samp METHOD = URS SAMPRATE = 1 SEED = &i NOPRINT ; RUN ; %calcul (work._samp, outTab = work._sampRes, poids = numberHits) ; %IF &i = 1 %THEN %DO ; DATA work._histo ; SET work._sampRes ; RUN ; %END ; %ELSE %DO ; PROC APPEND BASE = work._histo DATA = work._sampRes ; RUN ; %END ; %END ; %IF &log = non %THEN %DO ; OPTION NOTES ; %END ; DM "odsresults ; clear ; pgm off" wpgm ; TITLE1 "Valeur ""vraie"" : &vrai" ; PROC GCHART DATA = work._histo ; VBAR &varCalc / LEVELS = %IF &nbBoucles <= 500 %THEN %SYSFUNC(CEIL(&nbBoucles / 5)) ; %ELSE 100 ; ; RUN ; QUIT ; TITLE1 ; PROC UNIVARIATE DATA = work._histo NOPRINT ; VAR &varCalc ; OUTPUT OUT = work._bootstrap_percent PCTLPRE = q_ PCTLPTS = %SYSEVALF(&alpha*50) /* quantile d'ordre Alpha/2 */ %SYSEVALF(100-&alpha*50) /* quantile d'ordre 1-Alpha/2 */ N = NbLoops ; RUN ; TITLE1 "Intervalle de confiance à %SYSFUNC(COMPRESS(%SYSEVALF(&alpha*100))) %" ; TITLE2 "&nbBoucles boucles bootstrap" ; PROC PRINT DATA = work._bootstrap_percent LABEL NOOBS ; VAR q_: ; RUN ; TITLE ; %MEND bootstrap_percentile ;