DATA Step, Macro, Functions and more

how to call a format in the datastep

Reply
Occasional Contributor mj5
Occasional Contributor
Posts: 10

how to call a format in the datastep

DATA temp1;
  input subj 1-4 num_val 6 result $8-20 ;
  DATALINES;
1024 1 manual 
1167 1 manual 
1168 2 testing 
1201 2 testing 
1302 3 plain
1302 4 natural
;

data fmtdata;
  set temp1 (rename=(num_val=start result=label));
  by start;
  retain fmtname 'ncodes' type 'N';
  if first.start;
run;

proc format cntlin = fmtdata;
run;

How to call the format?

I am using format num_val $ncodes.;

But it doesnt work

Super Contributor
Posts: 440

Re: how to call a format in the datastep

You've created ncodes as a numeric format - it's character formats which have the $ sign at the start so drop that and you should be fine.

Occasional Contributor mj5
Occasional Contributor
Posts: 10

Re: how to call a format in the datastep

Posted in reply to ChrisBrooks

Thanks, Can the length be increased for the format name for fmtname as the formats are getting truncated

Super Contributor
Posts: 440

Re: how to call a format in the datastep

You shouldn't really need to do that - can you post the data and code you're using to apply the format?

Super User
Posts: 5,509

Re: how to call a format in the datastep

You can control the number of characters of the formatted value that print.  All of these would be legitimate uses of the same format:

 

format num_val ncodes.;

format num_val ncodes4.;

format num_val ncodes8.;

 

That's the reason that you can't create a format name ending in a digit ... it gives you the flexibility later to add a width when applying the format.

Occasional Contributor mj5
Occasional Contributor
Posts: 10

Re: how to call a format in the datastep

Posted in reply to Astounding

can i sort the formatted character value on basis of numeric.

For example format num_val ncodes.; is there anyway i can sort on basis of numeric values?

Super User
Posts: 7,794

Re: how to call a format in the datastep

[ Edited ]

proc sort will use the raw, unformatted value of a variable. If you want to sort by formatted values, create a new variable that holds those formatted values and sort by that.

Certain SAS procedures can be told to use formatted values in their calculations (ie proc freq).

---------------------------------------------------------------------------------------------
Maxims of Maximally Efficient SAS Programmers
Ask a Question
Discussion stats
  • 6 replies
  • 102 views
  • 1 like
  • 4 in conversation