mf_getvarlen.sas
Go to the documentation of this file.
1 /**
2  @file
3  @brief Returns the length of a variable
4  @details Uses varlen function to identify the length of a particular variable.
5  Usage:
6 
7  data test;
8  format str $1. num datetime19.;
9  stop;
10  run;
11  %put %mf_getVarLen(test,str);
12  %put %mf_getVarLen(work.test,num);
13  %put %mf_getVarLen(test,renegade);
14 
15  returns:
16 
17  1
18  8
19  NOTE: Variable renegade does not exist in test
20 
21  @param [in] libds Two part dataset (or view) reference.
22  @param [in] var Variable name for which a length should be returned
23  @returns outputs length
24 
25  @author Allan Bowe
26  @version 9.2
27 
28 **/
29 
30 %macro mf_getVarLen(libds /* two level ds name */
31  , var /* variable name from which to return the length */
32 )/*/STORE SOURCE*/;
33  %local dsid vnum vlen rc;
34  /* Open dataset */
35  %let dsid = %sysfunc(open(&libds));
36  %if &dsid > 0 %then %do;
37  /* Get variable number */
38  %let vnum = %sysfunc(varnum(&dsid, &var));
39  /* Get variable format */
40  %if(&vnum > 0) %then %let vlen = %sysfunc(varlen(&dsid, &vnum));
41  %else %do;
42  %put NOTE: Variable &var does not exist in &libds;
43  %let vlen = %str( );
44  %end;
45  %end;
46  %else %do;
47  %put &sysmacroname: dataset &libds not opened! (rc=&dsid);
48  %put &sysmacroname: %sysfunc(sysmsg());
49  %return;
50  %end;
51 
52  /* Close dataset */
53  %let rc = %sysfunc(close(&dsid));
54  /* Return variable format */
55  &vlen
56 %mend mf_getVarLen;