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.

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.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 2 replies
  • 3198 views
  • 1 like
  • 3 in conversation