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

task > Create two arrays that can be used to access the number of students in grades 7

through 12 from each of your two input data sets. Create a third array that will

create and access new variables named Grade7 through Grade12.

 

i have two data sets ok_mid and ok_high, now i want to make two arrays to access Grade7 - Grade12 from both data sets to add them. So far i have only seen one array - one data sets in a scope examples. how can i achieve above task 

thanks.

proc sort data=data.ok_mid out=mid_sorted(rename=(Grade7-Grade12=MS_Grade7-MS_Grade12)); by MapCity School; run;
proc sort data=data.ok_high out=high_sorted(rename=(Grade7-Grade12=HS_Grade7-HS_Grade12)); by MapCity School; run;

data Both Midonly (keep=School MapCity MailCity County) HSonly (keep=School MapCity MailCity County);
merge mid_sorted (in=A) 
	  high_sorted (in=B);
by MapCity School;
if A=1 and B=1 then output Both; 
/*(b) create a temporary data set of high schools with no matching record in ok_mid*/
else if A=0 and B=1 then output HSonly;
/*(c) create a temporary data set of middle schools with no matching record in ok_high*/
else if A=1 and B=0 then output Midonly;
run;

data;
	set high_sorted;
	array hs_array {6} HS_Grade7-HS_grade12;
	set mid_sorted;
	array ms_array {6} MS_Grade7-MS_Grade12;
	array new_array {6} Grade7-Grade12;
	do i =1 to 6;
		new_array[i] = hs_array[i] + ms_array[i];
	end;
run;
1 ACCEPTED SOLUTION

Accepted Solutions
RW9
Diamond | Level 26 RW9
Diamond | Level 26

In your last step you access high_sorted, its likely you want to access the both dataset - i.e. the dataset you merge before hand to get all those variables into one dataset.  Maybe something like this (and updated the formatting so its more readable - also note that a and b are bolean 1 or 0, so you don't need the a=1, just a);

proc sort data=data.ok_mid out=mid_sorted (rename=(grade7-grade12=ms_grade7-ms_grade12)); 
  by mapcity school; 
run;

proc sort data=data.ok_high out=high_sorted (rename=(grade7-grade12=hs_grade7-hs_grade12)); 
  by mapcity school; 
run;

data both midonly (keep=school mapcity mailcity county) hsonly (keep=school mapcity mailcity county);
  merge  mid_sorted (in=a) 
  	 high_sorted (in=b);
  by mapcity school;
  if a and b then output both; 
  else if not(a) and b then output hsonly;
  else output midonly;
run;

data;
  set both;
  array hs_array {6} hs_grade7-hs_grade12;
  array ms_array {6} ms_grade7-ms_grade12;
  array new_array {6} grade7-grade12;
  do i=1 to 6;
    new_array{i}=hs_array{i} + ms_array{i};
  end;
run;

 

View solution in original post

2 REPLIES 2
RW9
Diamond | Level 26 RW9
Diamond | Level 26

In your last step you access high_sorted, its likely you want to access the both dataset - i.e. the dataset you merge before hand to get all those variables into one dataset.  Maybe something like this (and updated the formatting so its more readable - also note that a and b are bolean 1 or 0, so you don't need the a=1, just a);

proc sort data=data.ok_mid out=mid_sorted (rename=(grade7-grade12=ms_grade7-ms_grade12)); 
  by mapcity school; 
run;

proc sort data=data.ok_high out=high_sorted (rename=(grade7-grade12=hs_grade7-hs_grade12)); 
  by mapcity school; 
run;

data both midonly (keep=school mapcity mailcity county) hsonly (keep=school mapcity mailcity county);
  merge  mid_sorted (in=a) 
  	 high_sorted (in=b);
  by mapcity school;
  if a and b then output both; 
  else if not(a) and b then output hsonly;
  else output midonly;
run;

data;
  set both;
  array hs_array {6} hs_grade7-hs_grade12;
  array ms_array {6} ms_grade7-ms_grade12;
  array new_array {6} grade7-grade12;
  do i=1 to 6;
    new_array{i}=hs_array{i} + ms_array{i};
  end;
run;

 

Reeza
Super User

First, get your data in the form you need it. Are the multiple SET statements in the last step creating a dataset in the right format. 

If no, figure that out first and then you can declare as many arrays as you want. I suspect you should be using the BOTH dataset.  Or a version with all of the data.

 

Arrays in SAS are only a short cut reference to the variables. They don't store data per se, just make it easier to reference a variable with an index.

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
  • 2 replies
  • 2363 views
  • 1 like
  • 3 in conversation