Help using Base SAS procedures

Creating variable with a name containing value of a different variable for an observation

Accepted Solution Solved
Reply
Contributor
Posts: 21
Accepted Solution

Creating variable with a name containing value of a different variable for an observation

Let's say I have a two columns, 1 with a bunch of names, and another with a bunch of dates:

 

 

 

data out;
set in;
%let d=400;

array name{&d};
array indate{&d};
h=1;
do i=1 to &d;
   if substr(name{i},1,4) in ("asdf", "jklo") then do;
       eh&h=indate{i}
       h=h+1;
   end;
end;
run;

This code is able to count the number of occurnaces of names "asdf" and "jklo" and set them for each observation as "h".

 

However, when I try to create the variable "eh&h" with &h to represent the h'th occurance of the names, it doesn't work.

 

How can I make it so the variable names created to set as indate contains the value of h for a given observation?

 

I tried even to create an array using the dimension of maximum number of h's in the dataset, but that didn't work either (and may have been the wrong idae). So i come here to see if there's something i'm just missing.

 

Thanks ahead of time.


Accepted Solutions
Solution
‎07-20-2016 08:32 AM
Contributor
Posts: 21

Re: Creating variable with a name containing value of a different variable for an observation

Posted in reply to chrisengel

Solved it myself, here's the code:

 

data out;
set in;
%let d=400;
%let e=50; *Max dimensions for the number of h's;

array name{&d};
array indate{&d};
array eh{&e};
h=1;
do i=1 to &d;
   if substr(name{i},1,4) in ("asdf", "jklo") then do;
       eh{h}=indate{i}
       h=h+1;
   end;
end;
run;

View solution in original post


All Replies
Solution
‎07-20-2016 08:32 AM
Contributor
Posts: 21

Re: Creating variable with a name containing value of a different variable for an observation

Posted in reply to chrisengel

Solved it myself, here's the code:

 

data out;
set in;
%let d=400;
%let e=50; *Max dimensions for the number of h's;

array name{&d};
array indate{&d};
array eh{&e};
h=1;
do i=1 to &d;
   if substr(name{i},1,4) in ("asdf", "jklo") then do;
       eh{h}=indate{i}
       h=h+1;
   end;
end;
run;
☑ This topic is solved.

Need further help from the community? Please ask a new question.

Discussion stats
  • 1 reply
  • 210 views
  • 0 likes
  • 1 in conversation