楼主您别怪我,你这东西···真的不值这个价钱。。。我发出来了。<br/><br/>*Avec ces deux méthodes ,vous n'aurez pas besoin de proc iml */<br/>/*1 ère méthode pour calculer la var hs */<br/>data zozo;<br/>input p1 p5;<br/>cards;<br/>run;<br/>%macro insert_percentile;<br/>proc sql;<br/>insert into zozo<br/>values (&p1,&p5);<br/>quit;<br/>%mend insert_percentile;<br/>data toto;<br/>do t = 1 to 500;<br/>rdt= ranuni(-2)*t;<br/>output;<br/>end ;<br/>run;<br/>%macro creation_percentile;<br/>ods listing close;<br/>%do i=0 %to 249;<br/>data tata ;<br/>set toto (firstobs=%eval(1+&i) obs=%eval(250+&i));<br/>run;<br/>proc univariate data= tata;<br/>var rdt;<br/>output out= percentile p1= p1 p5=p5;<br/>run;<br/>data _null_;<br/>set percentile;<br/>call symput ('p1',p1);<br/>call symput ('p5',p5);<br/>call execute ('%insert_percentile');<br/>run;<br/>%end;<br/>%mend creation_percentile ;<br/>%creation_percentile;<br/>ods listing;<br/>*création d'une table temporaire zozo,qui va servir plutard à insérer les<br/>percentiles ;<br/>*macro 'insert_percentile' permettant d'insérer les percentiles estimés dans<br/>la table temporaire zozo avec sql;<br/>*ici j'ai pris une table 'toto' quelconque ressemblant à peu près à la table<br/>que vous allez utilisez,juste pour décrire ce que je fais;<br/>*création de la macro 'creation_percentile' ,qui va utiliser les facilités des<br/>data step: firstobs et obs pour faire une table glissante;<br/>* j'utilise ici 'ods listing close' pour bloquer toute sortie dans ma fenêtre<br/>de résultats,sans cette option on aurait compter 250 icones 'proc univariate'<br/>dans la fenêtre de résultats;<br/>*je prends le soin d'utiliser 'ods listing' à la fin de l'exécution de ma macro<br/>pour débloquer la fenêtre de résultats que j'avais bloqué;<br/>*création de macro variables contenant les percentiles avec 'call symput' dans<br/>le step 'data _null_';<br/>*cérise sur le gateau je fais tourner une procédure sas dans une étape data<br/>grace à la commande 'call execute' ;<br/>/*2ème méthode plus subtile ,plus short, et plus fast que la précédente , car<br/>je code en sql/macro*/<br/>data zozo;<br/>input p1 p5;<br/>cards;<br/>run;<br/>data toto;<br/>do t = 1 to 500;<br/>rdt= ranuni(-2)*t;<br/>output;<br/>end ;<br/>run;<br/>%macro creation_percentile;<br/>ods listing close;<br/>%do i=0 %to 249;<br/>data tata ;<br/>set toto (firstobs=%eval(1+&i) obs=%eval(250+&i));<br/>run;<br/>proc univariate data= tata;<br/>var rdt;<br/>output out= percentile p1= p1 p5=p5;<br/>run;<br/>proc sql;<br/>select p1,p5 into :p1,:p5 from percentile ;<br/>insert into zozo<br/>values (&p1,&p5);<br/>quit;<br/>%end;<br/>%mend creation_percentile ;<br/>%creation_percentile;<br/>ods listing;<br/>