BookmarkSubscribeRSS Feed
Zatere
Quartz | Level 8

Hi I hope you all are well.

 

I am having the following issue.

 

I ve got a table that contains ProductID, Sale_Value, Quantity on which I take the sum of Sale_Value and Quantity on ProductID to create a table as below:

 

ProductID Sum of Sale_Value Sum of Quantity
1 5687.35 68
2 326.42 73
3 4478.55 29
4 2967.39 12
5 4478.55 88

 

Later I sort the data as follows:

 

PROC SORT DATA = have;
BY DESCENDING SUM_OF_SALE_VALUE DESCENDING SUM_OF_QUANTITY;
RUN: 

The expected output would the below:

 

ProductID Sum of Sale_Value Sum of Quantity
1 5687.35 68
5 4478.55 88
3 4478.55 29
4 2967.39 12
2 326.42 73

 

However, I am getting the below:

 

ProductID Sum of Sale_Value Sum of Quantity
1 5687.35 68
5 4478.55 29
3 4478.55 88
4 2967.39 12
2 326.42 73

 

I have checked the raw data and indeed the totals for ProductIDs 5 and 3 are as shown above, so I rule out the possibility of hidden rounding numbers.

 

For some reason that I cannot understand the PROC SORT does not give the desired output.

 

Any ideas please?

Thanks

5 REPLIES 5
novinosrin
Tourmaline | Level 20

The following test produces the expected output. Please check dataset you running proc sort against and the rounding errors once again -1. at raw data 2. SAS dataset 

 


data have;
input ProductID	SUM_OF_SALE_VALUE	SUM_OF_QUANTITY;
cards;
1	5687.35	68
2	326.42	73
3	4478.55	29
4	2967.39	12
5	4478.55	88
;

PROC SORT DATA = have out=want;
BY DESCENDING SUM_OF_SALE_VALUE DESCENDING SUM_OF_QUANTITY;
RUN;

proc print noobs;run;
ProductID SUM_OF_SALE_VALUE SUM_OF_QUANTITY
1 5687.35 68
5 4478.55 88
3 4478.55 29
4 2967.39 12
2 326.42 73
Reeza
Super User

Check your SORTSEQ option perhaps?

 

Otherwise, your code does work as expected on my machine so something else is the issue.

 

This should return a blank. 

proc options option=sortseq;
run;

 


@Zatere wrote:

Hi I hope you all are well.

 

I am having the following issue.

 

I ve got a table that contains ProductID, Sale_Value, Quantity on which I take the sum of Sale_Value and Quantity on ProductID to create a table as below:

 

ProductID Sum of Sale_Value Sum of Quantity
1 5687.35 68
2 326.42 73
3 4478.55 29
4 2967.39 12
5 4478.55 88

 

Later I sort the data as follows:

 

PROC SORT DATA = have;
BY DESCENDING SUM_OF_SALE_VALUE DESCENDING SUM_OF_QUANTITY;
RUN: 

The expected output would the below:

 

ProductID Sum of Sale_Value Sum of Quantity
1 5687.35 68
5 4478.55 88
3 4478.55 29
4 2967.39 12
2 326.42 73

 

However, I am getting the below:

 

ProductID Sum of Sale_Value Sum of Quantity
1 5687.35 68
5 4478.55 29
3 4478.55 88
4 2967.39 12
2 326.42 73

 

I have checked the raw data and indeed the totals for ProductIDs 5 and 3 are as shown above, so I rule out the possibility of hidden rounding numbers.

 

For some reason that I cannot understand the PROC SORT does not give the desired output.

 

Any ideas please?

Thanks


 

ballardw
Super User

Perhaps your value for SUM_OF_SALE_VALUE has a small decimal value larger than is being displayed. This is quite likely if your format is something like an F10.2 format and the value was calculated from a number of values.

You can test my hypothesis by printing the result using a format like BEST32.

 

data example;
   input x y ;
   format x 8.2;
datalines;
4478.5400001  29
5687.35   68
4478.54  88
;
proc sort data=example;
  by descending x descending y;
run;

proc print data=example;
title 'Default 8.2 format';
run;
proc print data=example;
title 'Best32. format';
format x best32.;
run;title;

If you discover this is the case then ROUND the variable in the data set before sorting. 

data tosort;
   set example;
   x=round(x, 0.01);
run;
ChrisNZ
Tourmaline | Level 20

Your data probably looks something like:

 

ProductID Sum of Sale_Value Sum of Quantity
1 5687.35 68
5 4478.550000001 29
3 4478.55 88
4 2967.39 12
2 326.42 73

 

Clean it by rounding it, as mentioned.

hackathon24-white-horiz.png

The 2025 SAS Hackathon has begun!

It's finally time to hack! Remember to visit the SAS Hacker's Hub regularly for news and updates.

Latest Updates

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
  • 5 replies
  • 1289 views
  • 4 likes
  • 6 in conversation