BookmarkSubscribeRSS Feed
Hansmuffs
Fluorite | Level 6

Hey,

 

I want to change a datetyp of column and I'm not sure if this is the correct way to do this. I mean my solution works, but is their a possibility to define the new datatyp directly in the attrib function? Maybe with the informat definition. I'm not really sure what informat is and when I should use this.

 

data inputData;
	input	
		name 	$
		amount	$;
	datalines;
		Peter 100
		Kai 25
	;
run;

data outputData;
	attrib	
		name 	format = $10.
		amount  format = $10.
		/* amount informat = $10. format 10.*/
	;
	set inputData;
	amount_tmp = input(amount, 10.);
	drop amount;
	rename amount_tmp = amount;
run;

 

Thanks 

Hans

4 REPLIES 4
Astounding
PROC Star
You do need to jump through the drop/rename hoop. However, the program works without the attrib statement. That can be removed.

Also note, the top DATA step assigns AMOUNT a length of $8. If that's the case (and I realize your post might be a simplification of your actual program), your solution still works. But you need to read only 8 characters not 10 in the formula for AMOUNT_TMP.

Hansmuffs
Fluorite | Level 6

I need to change datatype from character to numeric. 

When I change dataype from format 10. to 8. maybe when I have long numbers 12345678910 some numbers at the end will be cut?!

 

data outputData_V3;
	set inputData;
	amount = input(amount, 8.);
	amount_final = input(amount, 8.);
	drop amount;
	rename amount_final = amount;
run;

I don't know how to change the datatyp without drop and rename because as you can see amount = input(amount, 8.) will not create a numeric value it is still character. But the amount_final is in numeric format.

Astounding
PROC Star

OK, let's go back to your original program, with ATTRIB cut out:

data inputData;
	input	
		name 	$
		amount	$;
	datalines;
Peter 100
Kai 25
;

data outputData;
	set inputData;
	amount_tmp = input(amount, 10.);
	drop amount;
	rename amount_tmp = amount;
run;

This should work.  Yes, this never works:  amount = input(amount, 10.);

 

The top DATA step gives AMOUNT a length of $8.  It could never store "1234567890".  In real life, that may not be how AMOUNT got created, so it may actually have a longer length.  Within the INPUT function, use whatever length is actually assigned to AMOUNT.

andreas_lds
Jade | Level 19

Why is it necessary to change the variable type? I would fix the importing process. If that can't be done, using the input-function is the way to go.

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
  • 4 replies
  • 466 views
  • 0 likes
  • 3 in conversation