Production Ready Macros for SAS Application Developers
https://github.com/sasjs/core
mp_distinctfmtvalues.sas
Go to the documentation of this file.
1 /**
2  @file
3  @brief Creates a dataset containing distinct _formatted_ values
4  @details If no format is supplied, then the original value is used instead.
5  There is also a dependency on other macros within the Macro Core library.
6  Usage:
7 
8  %mp_distinctfmtvalues(libds=sashelp.class,var=age,outvar=age,outds=test)
9 
10  @param libds input dataset
11  @param var variable to get distinct values for
12  @param outvar variable to create. Default: `formatted_value`
13  @param outds dataset to create. Default: work.mp_distinctfmtvalues
14  @param varlen length of variable to create (default 200)
15 
16  @version 9.2
17  @author Allan Bowe
18 
19 **/
20 
21 %macro mp_distinctfmtvalues(
22  libds=
23  ,var=
24  ,outvar=formatted_value
25  ,outds=work.mp_distinctfmtvalues
26  ,varlen=2000
27 )/*/STORE SOURCE*/;
28 
29  %local fmt vtype;
30  %let fmt=%mf_getvarformat(&libds,&var);
31  %let vtype=%mf_getvartype(&libds,&var);
32 
33  proc sql;
34  create table &outds as
35  select distinct
36  %if &vtype=C & %trim(&fmt)=%str() %then %do;
37  &var
38  %end;
39  %else %if &vtype=C %then %do;
40  put(&var,&fmt)
41  %end;
42  %else %if %trim(&fmt)=%str() %then %do;
43  put(&var,32.)
44  %end;
45  %else %do;
46  put(&var,&fmt)
47  %end;
48  as &outvar length=&varlen
49  from &libds;
50 %mend;