BookmarkSubscribeRSS Feed
hamhocks
Calcite | Level 5

Hi all,

I am trying to create deciles for sales data - by channel

So I have a list of customers with their total sales, online sales, and store sales.  I want to create ranked deciles for each one of these.

seems easy, but here's the catch.  I want to ignore zeros.  In many cases their sales will be in stores onlty so there will be a zero for online sales.  I don't want to include that record in the ranking of online.

Will i need to split them up into separate tables to do this and then put them back together?

here;s the current code:

proc rank data=&reportname out=&reportname  groups=10 ties=high;

ranks r_txns r_ol_txns r_st_txns;

var txns ol_txns st_txns;

by segment;

run;

any guidance would be much appreciated!

thanks!

3 REPLIES 3
ballardw
Super User

Probably need a variable with missing instead of 0 for the online. If you might need the original value then take a pass through a data step to add a new variable.

PGStats
Opal | Level 21

Try using a view:

data v / view=v;

set &reportname;

if txns > 0      then r_txns = txns;

if ol_txns > 0 then r_ol_txns = ol_txns;

if st_txns > 0 then r_st_txns = st_txns;

run;

proc rank data=v out=&reportname  groups=10 ties=high;

var r_txns r_ol_txns r_st_txns;

by segment;

run;

(untested)

PG

PG
hamhocks
Calcite | Level 5

thanks! this worked perfectly

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
  • 3 replies
  • 3112 views
  • 3 likes
  • 3 in conversation