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

Hi I hope you're all well,

 

I have a simple problem yet quite disturbing as I don't know what happens exactly and why don't I get the results wanted, to put you in the context let's suppose you have a table with variables like this ;

 

project    company    category    ROI    contribution

 

My aim is quite simple, i wanna sum my contibs according to certain companies by project and category ( i'm sorry i can't give you the right names nor values of my table for confidentiality purposes ).

 

Now since i want only certain clients sums I did this : ( assume the company is Shelbey LTD )

 

proc sort data=table2; by  project category ;run;

options mprint;
data table3;
set table2;
Company = scan(project,1,'_'); /* from here i get my company name */
by project category;
if Company = "SHELBEY LTD" then do;
	if First.contrib then contrib2=0;
		contrib + contrib2;
	if Last.contrib;
end;
run;

Well, in the results all my companies are there with no value in contrib2 ( which is normal considering the fact that i "selected" only the shelbey company ) but all the shelbey observations disappeard !

It's quite weird, this the first time i encounter this kind of difficulty.

 

here is the message i got from the log

NOTE: Variable 'First.contrib'n is uninitialized.
NOTE: Variable 'Last.contrib'n is uninitialized.
NOTE: There were 1052 observations read from the data set WORK.TABLE2.
NOTE: The data set WORK.TABLE3 has 860 observations and 13 variables.
NOTE: Compressing data set WORK.TABLE3 decreased size by 83.33 percent. 
      Compressed is 2 pages; un-compressed would require 12 pages.
NOTE: DATA statement used (Total process time):
      real time           0.00 seconds
      cpu time            0.00 seconds

 

Please Help if you can.

 

Thanks in advance and stay safe 🙂

1 ACCEPTED SOLUTION

Accepted Solutions
gamotte
Rhodochrosite | Level 12

I think you should use first.category and last.category instead of first.contrib and last.contrib.

 

I guess you probably also want to change :

contrib+contrib2;

into

contrib2+contrib;

That is contrib2 is the sum of contrib column for the current project/category.

View solution in original post

5 REPLIES 5
gamotte
Rhodochrosite | Level 12
Hello,
You use first.contrib and last.contrib but contrib is not in your by statement.
gamotte
Rhodochrosite | Level 12

I think you should use first.category and last.category instead of first.contrib and last.contrib.

 

I guess you probably also want to change :

contrib+contrib2;

into

contrib2+contrib;

That is contrib2 is the sum of contrib column for the current project/category.

skavli
Calcite | Level 5
why is the second order important ?
gamotte
Rhodochrosite | Level 12
COL1+COL2;

is a short way to write :

retain COL1;

COL1=sum(COL1, COL2);

So the leftmost operand should be the name of the column that will contain the summation result.

skavli
Calcite | Level 5
Oh yes, I realized that i have loop over the occurences in my by group not the values that corresponds to it thanks !

SAS Innovate 2025: Call for Content

Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!

Submit your idea!

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
  • 5 replies
  • 757 views
  • 0 likes
  • 2 in conversation