BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
tmcwill
Fluorite | Level 6

I have a dataset that has a large number of variables (2,880 to be exact). Right now, the variables have the default variable names var1, var2, var3, ..., var2880. I need to label the variables according to 30 second intervals of military time - 00:00:00, 00:00:30, 00:01:00, 00:01:30, 00:02:00,...,23:59:30. I'm trying to figure out a way to do this without having to type all 2,880 by hand. I was thinking of using an array somehow, but I don't have a list of the desired labels stored anywhere, so I would still have to hand type them into the array. Any suggestions are appreciated! 

1 ACCEPTED SOLUTION

Accepted Solutions
PaigeMiller
Diamond | Level 26

here's my code to do this for 3 variables, obviously its easy to change for 2880 variables

 

/* I created a data set for me to work with, you don't have to do this step */
data have;
    var1=0;
	var2=0;
	var3=0;
run;

%macro dothis;
	proc datasets library=work /* or you can use another library */ nolist;
	    modify have; /* Your actual data set name goes here */
  		%do i=1 %to 3;
			%let seconds=%eval((&i-1)*30);
		    %let thistime=%sysfunc(putn(&seconds,time8.));
/*			%put &=i &=seconds &=thistime;*/
			label var&i = "&thistime";
		%end;
	run; quit;
%mend;
%dothis
--
Paige Miller

View solution in original post

3 REPLIES 3
PaigeMiller
Diamond | Level 26

here's my code to do this for 3 variables, obviously its easy to change for 2880 variables

 

/* I created a data set for me to work with, you don't have to do this step */
data have;
    var1=0;
	var2=0;
	var3=0;
run;

%macro dothis;
	proc datasets library=work /* or you can use another library */ nolist;
	    modify have; /* Your actual data set name goes here */
  		%do i=1 %to 3;
			%let seconds=%eval((&i-1)*30);
		    %let thistime=%sysfunc(putn(&seconds,time8.));
/*			%put &=i &=seconds &=thistime;*/
			label var&i = "&thistime";
		%end;
	run; quit;
%mend;
%dothis
--
Paige Miller
ballardw
Super User

I have a very hard time visualizing where that many variables would be desirable. Without very important reasons I would likely Transpose the data to one record per time period and then Create a time variable.

 

Something along these lines:

data want;
   set have;
   array v var1 - var2880 ;
   count=1;
   do time= "00:00:00"t to "23:59:30"t by 30;
      value = v[count];
      output;
      count=count+1;
   end;
   keep /* other needed variables go here*/ time value;
   format time time8.;
run;

Or even read the source date differently.

 

 

PaigeMiller
Diamond | Level 26

A good suggestion for most situations.

--
Paige Miller

Ready to join fellow brilliant minds for the SAS Hackathon?

Build your skills. Make connections. Enjoy creative freedom. Maybe change the world. Registration is now open through August 30th. Visit the SAS Hackathon homepage.

Register today!
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
  • 511 views
  • 1 like
  • 3 in conversation