Hello, I would like to test for the benefits using the parallel processing mostly in term of process time. It is my first steps toward the parallel processing. First some details about my windows environment are saved in the file Windows1.docx The version of SAS I am using as well as the procedure available are included in the two text files. My test of parallel processing is base on the following paper: https://analytics.ncsu.edu/sesug/2013/PA-08.pdf The first program generate the synthetic data. The second program carry out many statistical tests in series. However, the following program (the parallel processing) is not working properly. As I have absolutely non experience with this approach, I am not able to make the trouble shooting. Moreover, there are many command for which I don't understand how to use them as well as their purpose. The log file is included. Sorry some lines are in French. Here's the parallel processing program, I would like to test. I have included questions as comments. libname ip "...\Test\Parallel Processing\Data"; libname op "...\Test\Parallel Processing\Statistical Data"; %macro parallel_process(ilib=,idsn=,olib=op,odsn=); options fullstimer autosignon=yes sascmd="sas92 -nonews -threads"; /*What's the purpose of the instruction autosignon=yes? */ /*What are the purposes of the sas commands sascmd= SAS92? -nonews? and -threads?*/ /*I have add few macro variables to help to troubleshooting the program inside the macro parallel processing */ %let ilib=ip; %let idsn=random_data_2_500000; %let olib=op; %let odsn=pp_uni_2v_500000o; %global num_vars thread ; %let num_vars=%sysfunc(attrn(%sysfunc(open(&ilib..&idsn.,i)),nvars)); /*In the synthetic data sets, there are 21 variables (ID, character variable, and all others are numerical)*/ %do thread = 1 %to (&num_vars-1); /*What's the purpose of signon task&thread wait=yes ?*/ signon task&thread. wait=yes; %syslput thread = &thread; /*Does the 4 macro variables below will change during the looping? If not, is it necessary to put those in the loop and if so why ?*/ %syslput ilib = &ilib; %syslput idsn = &idsn; %syslput olib = &olib; %syslput odsn = &odsn; /*I am not sure that SAS EG 7.1 does understand the instructions below*/ /*Which instruction can we use in replacement of rsubmit process=task&Thread. wait=no sysrputsync=yes ?*/ /*What's the purpose of sysrputsync = yes ?*/ rsubmit process=task&thread. wait=no sysrputsync=yes; /*Do we have to assign two libraries in the loop while those have been declared outside the loop ? and if so why?*/ libname ip "...\Test\Parallel Processing\Data"; libname op "...\Test\Parallel Processing\Statistical Data"; /*The same options used outside the loop and inside the loop...Why do we need to repeat those?*/ options fullstimer autosignon=yes sascmd="sas92 -nonews -threads"; %macro univ_parallel; proc univariate data=&ilib..&idsn. noprint; var var_&thread.; output out=&olib..&odsn._&thread. /* Descriptive Statistics */ CSS=CSS CV=CV KURTOSIS=KURTOSIS MAX=MAX MEAN=MEAN MIN=MIN MODE=MODE N=N NMISS=NMISS NOBS=NOBS RANGE=RANGE SKEWNESS=SKEWNESS STD=STD STDMEAN=STDMEAN SUM=SUM SUMWGT=SUMWGT USS=USS VAR=VAR /* Quantile Statistics */ P1=P1 P5=P5 P10=P10 Q1=Q1 MEDIAN=MEDIAN Q3=Q3 P90=P90 P95=P95 P99=P99 QRANGE=QRANGE /* Robust Statistics */ GINI=GINI MAD=MAD QN=QN SN=SN STD_GINI=STD_GINI STD_MAD=STD_MAD STD_QN=STD_QN STD_QRANGE=STD_QRANGE STD_SN=STD_SN /* Hypothesis Testing Statistics */ MSIGN=MSIGN NORMALTEST=NORMALTEST SIGNRANK=SIGNRANK PROBM=PROBM PROBN=PROBN PROBS=PROBS PROBT=PROBT ; run; %mend univ_parallel; %univ_parallel; /*Again, SAS EG 7.1 does not understand the instruction endrsubmit. Which instruction can we use in replacement?*/ endrsubmit; %end /*thread = 1 %to (&num_vars-1)*/; /*The instruction task&Thread. is in red which tell me that there is something's wrong?*/ /*Does this loop is correct and what's the purpose of calling task&thread.?*/ waitfor _all_ %do thread = 1 %to (&num_vars-1); task&thread; %end; /*Houf! last questions. What's the purpose of rget and signoff?**/ %do thread = 1 %to (&num_vars-1); rget task&thread; %end; %do thread = 1 %to (&num_vars-1); signoff task&thread; %end; %mend parallel_process; %parallel_process(ilib=ip,idsn=random_data_2_500000, olib=op,odsn=pp_uni_2v_500000o); Thanks in advance for your help. alepage
... View more