BookmarkSubscribeRSS Feed
rdwest
Calcite | Level 5
Hello,

I am having trouble figuring out how to use the value of a variable (in my case, the value of the variable "flight_counter" in the code below) to call up another variable to be changed (specifically, a variable with the prefix "ac_cat_", and a suffix dependent on "flight_counter"). I would eventually like to use a "do while" loop instead of the "do" loop in the code below, changing the variable "condition" at the end of each turn of the loop, such that the process is repeated until "condition" reaches 0. This will require "flight_counter" to increase an unknown number of times.So, for example, when flight_counter = 1, I need to insert the value of "n" into the variable "ac_cat_1" ; when flight_counter = 2, insert the value of "n" into "ac_cat_2" ; and so on. The set of variables prefixed "ac_cat_" is created, and filled with ".". I need a statement before the end of the "if" statement to populate the appropriate "ac_cat_" variable with the value of "n". For now, I have inserted the line "ac_cat_1 = n;", but the "1" needs to be changed to a reference to the value of "flight_counter".




data mydata_out; set mydata ;
flight_counter = 0;
empty_seat_counter = sgmt_empty_seats;
remaining_pass_counter = add_passenger_demand;
condition = remaining_pass_counter >= .25*empty_seat_counter;


if condition = 1 then do;
drop i ;
flight_counter = flight_counter + 1;
array cum_p {0:6} cum_p_0 - cum_p_6;
array lf {0:6} load_factor_0 - load_factor_6;
array choose{0:6};

do i = 0 to 6 ;
x = uniform(-1) ;
choose{i} = x >= cum_p{i} ;
end;
n = sum(of choose{*});

load_factor_chosen = lf{n} ;
ac_cat_1 = n;

end;

run;




I have tried to do this saving the value of "flight_counter" as a macro variable. For example:
%let f = flight_counter ;
ac_cat_&f = n;

However, this does not seem to be a valid way of referencing the variable "ac_cat_1" in this truncated loop; it simply resolves to "ac_cat_" in the log.

If someone could give me a tip on how to do this, I'd really appreciate it.

Many thanks.
1 REPLY 1
Cynthia_sas
SAS Super FREQ
Hi:
Example of using one variable (not the do loop iterator) as the index to an array was posted here:
http://support.sas.com/forums/thread.jspa?messageID=48471뵗

For example:
[pre]
array acc AC_CAT_1-AC_CAT_200;
n = some calc;
flight_number=1;
acc(flight_number) = n; /* however you calculate N */
[/pre]

Plus a second program example was also posted.

cynthia

sas-innovate-2024.png

Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.

Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.

 

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
  • 1 reply
  • 640 views
  • 0 likes
  • 2 in conversation