BookmarkSubscribeRSS Feed
Bedi
Calcite | Level 5

Hi ,

 

I am trying to cross a few variables but I want to cross just the specific values in those variables.

 

For Eg. I have a variable

 

Variable CO_Nike - Value 1 - ' Owners'

                                 Value 2 - 'Nonowner'

 

Now, I just want to cross the CO_Nike 'Owners' with all my other variables. How can I do this?

 

Below is the code I have till now , which gives me results for both owners and non-owners

 

data all_uk_ts;
	input V10101 2. +1 co_nike 1.;
	Datalines; 11 1
11 1
11 2
11 1
11 1
11 2
11 1
11 2
11 2
11 1
12 1
12 2
12 1
12 1
12 2
12 1
12 2
12 1
12 1
;

run;

proc print data=all_uk_ts;
run;

proc format;
  value for_ownership 
    1='Owners'
    2='Nonowners';
  value for_country 
    11='UK'
    12='GE';					 
run;

proc tabulate data=all_uk_ts format=10.0;
  format co_nike for_ownership. v10101 for_country.; 
  class co_nike v10101;
  tables co_nike,v10101;
run;

 

 

Below is the output I am getting

Current ouput.PNG 

 

But I want just the owners row in my output.

10 REPLIES 10
RW9
Diamond | Level 26 RW9
Diamond | Level 26

Post test data in the form of a datastep.  Show what you want the output to look like.  At a guess add:

data all_uk_ts;
  set all_uk_ts;
run;

proc format;
  value for_ownership 
    1='Owners'
    2='Nonowners';
  value for_country 
    11='UK';					 
run;

proc tabulate data=master.all_uk_ts format=10.0;
  format co_nike for_ownership. v10101 for_country.; 
where co_nike=1; class co_nike v10101; tables co_nike,v10101; run;

Note how I avoid using uppercase, use indents, finish blocks of code etc.  It is important to make the code as readable as possible.

Bedi
Calcite | Level 5

Hey, Thanks for your comment, I have updated my post, please have look.

RW9
Diamond | Level 26 RW9
Diamond | Level 26

And I assume you tried it with the aforementioned where clause?

  where co_nike=1;
Bedi
Calcite | Level 5

Yes, however that solution will not be of much use as I want to implement this with multiple variables with select values in the row. 

RW9
Diamond | Level 26 RW9
Diamond | Level 26

Please post an example of your problem - the whole problem.  What does this mean for instance - "I want to implement this with multiple variables with select values"?

We can only answer the question as it is presented here.

Bedi
Calcite | Level 5

This is the whole problem which I have explained in detail in my post.

I want to understand how we can display the cross tab of certain values in the variables by using Proc tabulate.

 

 

RW9
Diamond | Level 26 RW9
Diamond | Level 26

I am trying to cross a few variables but I want to cross just the specific values in those variables.

 

For Eg. I have a variable

 

Variable CO_Nike - Value 1 - ' Owners'

                                 Value 2 - 'Nonowner'

 

Now, I just want to cross the CO_Nike 'Owners' with all my other variables. How can I do this?

 

Below is the code I have till now , which gives me results for both owners and non-owners

 

data all_uk_ts; input V10101 2. +1 co_nike 1.;  Datalines; 11 1 11 1 11 2 11 1 11 1 11 2 11 1 11 2 11 2 11 1 12 1 12 2 12 1 12 1 12 2 12 1 12 2 12 1 12 1 ; run; proc print data=all_uk_ts; run; proc format; value for_ownership 1='Owners' 2='Nonowners'; value for_country 11='UK' 12='GE'; run; proc tabulate data=all_uk_ts format=10.0; format co_nike for_ownership. v10101 for_country.; class co_nike v10101; tables co_nike,v10101; run;

 

 

Below is the output I am getting

Current ouput.PNG 

 

But I want just the owners row in my output.

 

I have bolded, in your post, what the question presented here is.  The answer to which is:

proc tabulate data=all_uk_ts format=10.0;
  format co_nike for_ownership. v10101 for_country.; 
  where co_nike=1;
  class co_nike v10101;
  tables co_nike,v10101;
run;

Which provides as output:

                                          The SAS System         13:16 Wednesday, July 4, 2018   2

                          ----------------------------------------------
                          |                      |       V10101        |
                          |                      |---------------------|
                          |                      |    UK    |    GE    |
                          |                      |----------+----------|
                          |                      |    N     |    N     |
                          |----------------------+----------+----------|
                          |co_nike               |          |          |
                          |----------------------|          |          |
                          |Owners                |         6|         6|
                          ----------------------------------------------

I cannot ascertain anything further I can provide without some explanation of what further is required?

 

Bedi
Calcite | Level 5

I thought I did my best to explain my problem but not enough for you. Here , I will give it another shot.

 

Below is my full code with all the brands like Nike, Adidas etc

 

data all_uk_ts;
	input V10101 2. +1 co_nike 1. +1 co_Adidas 1. +1 co_Reebok 1. +1 co_Bat 1.;
	Datalines; 11 1 1 2 2
11 1 2 1 1
11 2 2 1 2
11 1 2 1 1
11 1 2 2 1
11 2 1 2 2
11 1 1 1 1
11 2 2 2 2
11 2 2 2 1
11 1 1 1 1
12 1 2 1 1
12 2 2 1 2
12 1 1 1 1
12 1 1 1 1
12 2 1 2 2
12 1 1 1 1
12 2 2 2 2
12 1 1 1 1
12 1 1 1 1
;

run;

proc print data=all_uk_ts;
run;

proc format;
  value for_ownership 
    1='Owners'
    2='Nonowners';
  value for_country 
    11='UK'
    12='GE';					 
run;

proc tabulate data=all_uk_ts format=10.0;
  format co_nike -- co_Bat for_ownership. v10101 for_country.; 
  class co_nike co_Adidas co_Reebok co_Bat v10101;
  tables co_nike co_Adidas co_Reebok co_Bat,v10101;
run;

 

My Above code gives below output

 

Current ouput.PNG

However , the output that I am looking for is the one without 'Nonowners' rows in the above output.

 

I hope this explains.

RW9
Diamond | Level 26 RW9
Diamond | Level 26

So something like this (note your datalines is incorrect for the first one - it should be a on separate line, as such your numbers are 1 short).  What I do is blank the data I don't want to include, as tabulate does not use that by default:

data all_uk_ts;
  input V10101 2. +1 co_nike 1. +1 co_Adidas 1. +1 co_Reebok 1. +1 co_Bat 1.;
  array c co_:;
  do over c;
    if c=2 then c=.;
  end;
datalines; 
11 1 1 2 2
11 1 2 1 1
11 2 2 1 2
11 1 2 1 1
11 1 2 2 1
11 2 1 2 2
11 1 1 1 1
11 2 2 2 2
11 2 2 2 1
11 1 1 1 1
12 1 2 1 1
12 2 2 1 2
12 1 1 1 1
12 1 1 1 1
12 2 1 2 2
12 1 1 1 1
12 2 2 2 2
12 1 1 1 1
12 1 1 1 1
;

run;

proc format;
  value for_ownership 
    1='Owners'
    2='Nonowners';
  value for_country 
    11='UK'
    12='GE';                
run;

proc tabulate data=all_uk_ts format=10.0;
  format co_: for_ownership. v10101 for_country.; 
  class v10101;
  var co_:;
  tables co_: * (n=''),v10101;  /* You could put the word owners in the label there */
run;

Its a bit of a faff, which is why I really don't like the tabulate procedure.  If I was doing this table I would datastep my results, just a retained count, then transpose that up by country if needed.

Astounding
PROC Star

As a general approach ....

 

Using the PROC TABULATE as is, create an output data set.

 

Subset the output data set to contain just the data you want displayed.

 

Feed the subset into a second PROC TABULATE (probably requesting the SUM statistic).

sas-innovate-2024.png

Don't miss out on SAS Innovate - Register now for the FREE Livestream!

Can't make it to Vegas? No problem! Watch our general sessions LIVE or on-demand starting April 17th. Hear from SAS execs, best-selling author Adam Grant, Hot Ones host Sean Evans, top tech journalist Kara Swisher, AI expert Cassie Kozyrkov, and the mind-blowing dance crew iLuminate! Plus, get access to over 20 breakout sessions.

 

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
  • 10 replies
  • 1130 views
  • 0 likes
  • 3 in conversation