Working with Formats

You can use SAS formats and user-defined formats with high-performance analytical procedures as you can with other procedures in the SAS System. However, because the analytic work is carried out in a distributed environment and might depend on the formatted values of variables, some special handling can improve the efficiency of work with formats.

High-performance analytical procedures examine the variables that are used in an analysis for association with user-defined formats. Any user-defined formats that are found by a procedure are transmitted automatically to the appliance. If you are running multiple high-performance analytical procedures in a SAS session and the analysis variables depend on user-defined formats, you can preprocess the formats. This step involves generating an XML stream (a file) of the formats and passing the stream to the high-performance analytical procedures.

Suppose that the following formats are defined in your SAS program:

 
proc format; 
     value YesNo        1='Yes'        0='No'; 
     value checkThis    1='ThisisOne'  2='ThisisTwo'; 
     value $cityChar    1='Portage'    2='Kinston'; 
run; 

The next group of SAS statements create the XML stream for the formats in the file Myfmt.xml, associate that file with the file reference myxml, and pass the file reference with the FMTLIBXML= option in the PROC HPLOGISTIC statement:

 
filename myxml 'Myfmt.xml'; 
libname  myxml XML92 xmltype=sasfmt tagset=tagsets.XMLsuv; 
proc format cntlout=myxml.allfmts; 
run; 
 
proc hplogistic data=six fmtlibxml=myxml; 
   class wheeze cit age; 
   format wheeze best4. cit $cityChar.;  
   model wheeze = cit age; 
run; 

Generation and destruction of the stream can be wrapped in convenience macros:

 
%macro Make_XMLStream(name=tempxml); 
    filename &name 'fmt.xml'; 
    libname  &name XML92 xmltype=sasfmt tagset=tagsets.XMLsuv; 
    proc format cntlout=&name..allfmts; 
    run; 
%mend; 
 
%macro Delete_XMLStream(fref); 
    %let rc=%sysfunc(fdelete(&fref)); 
%mend; 

If you do not pass an XML stream to a high-performance analytical procedure that supports the FMTLIBXML= option, the procedure generates an XML stream as needed when it is invoked.