BookmarkSubscribeRSS Feed
data_null__
Jade | Level 19

It's Friday.

 

proc format;
   value xfmt  other='Num';
   value $xfmt other='Chr';
   run;
data class;
   set sashelp.class;
   format _all_ xfmt.;
   run;
proc contents varnum;
   run;
      Variables in Creation Order

#    Variable    Type    Len    Format

1    Name        Char      8    $XFMT.
2    Sex         Char      1    $XFMT.
3    Age         Num       8    XFMT.
4    Height      Num       8    XFMT.
5    Weight      Num       8    XFMT.

 

27   data class;
28      set sashelp.class;
29      format _all_ xfmt.;
30      run;

NOTE: There were 19 observations read from the data set SASHELP.CLASS.
NOTE: The data set WORK.CLASS has 19 observations and 5 variables.
NOTE: DATA statement used (Total process time):
      real time           0.00 seconds
      cpu time            0.00 seconds
3 REPLIES 3
FreelanceReinh
Jade | Level 19

This is good to know. Thanks for sharing! It simplifies the assignment of two of my favorite user-defined formats:

proc format;
value miss
._-.z = 'missing'
other = 'non-missing';

value $miss
' '   = 'missing'
other = 'non-missing';
run;

 

Ksharp
Super User

Very interesting thing.

Maybe SAS is too smart . a.k.a AI technology .

data_null__
Jade | Level 19

Note this trick doesn't work in PROCs at least not SUMMARY/MEANS my favorite.  I use a data step VIEW.

 

My application is passed a list of variables of mixed type.  I want to associated a format to collapse all non-missing levels to one similar to @FreelanceReinh missing/not-missing example.  I "can't" use _NUMERIC_ or _CHARACTER_ because I have other variable(s) that I don't want to associated with the format.

 

This also works but changes the order of the variables in the data set.  Order in the is usually not a concern.

 

proc format;
   value xfmt  other='Num';
   value $xfmt other='Chr';
   run;

%let vlist=Status DeathCause AgeCHDdiag Sex;

data heart;
   set sashelp.heart(keep=&vlist);
   format _character_ $xfmt. _numeric_ xfmt.;
   set sashelp.heart(drop=&vlist);
   run;
proc contents varnum;
   run;

  #    Variable          Type    Len    Format    Label

  1    Status            Char      5    $XFMT.
  2    DeathCause        Char     26    $XFMT.    Cause of Death
  3    AgeCHDdiag        Num       8    XFMT.     Age CHD Diagnosed
  4    Sex               Char      6    $XFMT.
  5    AgeAtStart        Num       8              Age at Start
  6    Height            Num       8
  7    Weight            Num       8
  8    Diastolic         Num       8
  9    Systolic          Num       8
 10    MRW               Num       8              Metropolitan Relative
 11    Smoking           Num       8
 12    AgeAtDeath        Num       8              Age at Death
 13    Cholesterol       Num       8
 14    Chol_Status       Char     10              Cholesterol Status
 15    BP_Status         Char      7              Blood Pressure Status
 16    Weight_Status     Char     11              Weight Status
 17    Smoking_Status    Char     17              Smoking Status

sas-innovate-2024.png

Don't miss out on SAS Innovate - Register now for the FREE Livestream!

Can't make it to Vegas? No problem! Watch our general sessions LIVE or on-demand starting April 17th. Hear from SAS execs, best-selling author Adam Grant, Hot Ones host Sean Evans, top tech journalist Kara Swisher, AI expert Cassie Kozyrkov, and the mind-blowing dance crew iLuminate! Plus, get access to over 20 breakout sessions.

 

Register now!

How to Concatenate Values

Learn how use the CAT functions in SAS to join values from multiple variables into a single value.

Find more tutorials on the SAS Users YouTube channel.

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

Discussion stats
  • 3 replies
  • 788 views
  • 7 likes
  • 3 in conversation