<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic calculating frequency and transpose variable in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/calculating-frequency-and-transpose-variable/m-p/678916#M204997</link>
    <description>&lt;P&gt;&lt;SPAN&gt;Hello, I want to calculate the percentage of ok/ko of each variable and consolidate all the results into a single table such as the table "WANT" &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;data have;&lt;BR /&gt;input var1 $ var2 $ VAR3 $;&lt;BR /&gt;CARDS;&lt;BR /&gt;ok ok ko&lt;BR /&gt;ko ok ko&lt;BR /&gt;ok ok ok&lt;BR /&gt;ok ok ok&lt;BR /&gt;ok ok ko&lt;BR /&gt;ko ok ok&lt;BR /&gt;ok ok ok&lt;BR /&gt;ok ok ko&lt;BR /&gt;;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;data want;&lt;BR /&gt;input varname $ prct_ok prct_ko;&lt;BR /&gt;CARDS;&lt;BR /&gt;var1 75 25&lt;BR /&gt;var2 100 0&lt;BR /&gt;var3 50 50&lt;BR /&gt;;&lt;BR /&gt;run;&lt;/P&gt;</description>
    <pubDate>Mon, 24 Aug 2020 16:07:16 GMT</pubDate>
    <dc:creator>mazouz</dc:creator>
    <dc:date>2020-08-24T16:07:16Z</dc:date>
    <item>
      <title>calculating frequency and transpose variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/calculating-frequency-and-transpose-variable/m-p/678916#M204997</link>
      <description>&lt;P&gt;&lt;SPAN&gt;Hello, I want to calculate the percentage of ok/ko of each variable and consolidate all the results into a single table such as the table "WANT" &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;data have;&lt;BR /&gt;input var1 $ var2 $ VAR3 $;&lt;BR /&gt;CARDS;&lt;BR /&gt;ok ok ko&lt;BR /&gt;ko ok ko&lt;BR /&gt;ok ok ok&lt;BR /&gt;ok ok ok&lt;BR /&gt;ok ok ko&lt;BR /&gt;ko ok ok&lt;BR /&gt;ok ok ok&lt;BR /&gt;ok ok ko&lt;BR /&gt;;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;data want;&lt;BR /&gt;input varname $ prct_ok prct_ko;&lt;BR /&gt;CARDS;&lt;BR /&gt;var1 75 25&lt;BR /&gt;var2 100 0&lt;BR /&gt;var3 50 50&lt;BR /&gt;;&lt;BR /&gt;run;&lt;/P&gt;</description>
      <pubDate>Mon, 24 Aug 2020 16:07:16 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/calculating-frequency-and-transpose-variable/m-p/678916#M204997</guid>
      <dc:creator>mazouz</dc:creator>
      <dc:date>2020-08-24T16:07:16Z</dc:date>
    </item>
    <item>
      <title>Re: calculating frequency and transpose variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/calculating-frequency-and-transpose-variable/m-p/678918#M204999</link>
      <description>&lt;P&gt;Do you want a data set like this? Or is this for reporting purposes?&lt;/P&gt;</description>
      <pubDate>Mon, 24 Aug 2020 16:10:33 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/calculating-frequency-and-transpose-variable/m-p/678918#M204999</guid>
      <dc:creator>PeterClemmensen</dc:creator>
      <dc:date>2020-08-24T16:10:33Z</dc:date>
    </item>
    <item>
      <title>Re: calculating frequency and transpose variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/calculating-frequency-and-transpose-variable/m-p/678923#M205003</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/339736"&gt;@mazouz&lt;/a&gt;&amp;nbsp; I am not sure either whether you want a "Report" or a "Dataset" as your WANT.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;For what it's worth, It's fun stuff-&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;
data have;
input var1 $ var2 $ VAR3 $;
CARDS;
ok ok ko
ko ok ko
ok ok ok
ok ok ok
ok ok ko
ko ok ok
ok ok ok
ok ok ko
;
run;
data _null_ ;
 if _n_=1 then do;
   dcl hash H (ordered: "A") ;
   h.definekey  ("varname","value") ;
   h.definedata ("varname","value","count","pct") ;
   h.definedone () ;
 end;
 set have nobs=nobs end=z;
 array t var1-var3;
 do over t;
  varname=upcase(vname(t));
  value=t;
  if h.find()=0 then count=sum(count,1);
  else count=1;
  pct=divide(count,nobs);
  h.replace();
 end;
 if z;
 h.output(dataset:'temp(drop=count)');
run;

proc freq data=temp;
 tables varname*value/sparse out=temp2(drop=percent) noprint;
 weight pct;
run;

proc transpose data=temp2 out=final_want(drop=_:) prefix=Pct_;
 by varname;
 id value;
 var count;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Mon, 24 Aug 2020 16:39:07 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/calculating-frequency-and-transpose-variable/m-p/678923#M205003</guid>
      <dc:creator>novinosrin</dc:creator>
      <dc:date>2020-08-24T16:39:07Z</dc:date>
    </item>
    <item>
      <title>Re: calculating frequency and transpose variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/calculating-frequency-and-transpose-variable/m-p/678928#M205005</link>
      <description>&lt;P&gt;I want data set not report&lt;/P&gt;</description>
      <pubDate>Mon, 24 Aug 2020 16:53:08 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/calculating-frequency-and-transpose-variable/m-p/678928#M205005</guid>
      <dc:creator>mazouz</dc:creator>
      <dc:date>2020-08-24T16:53:08Z</dc:date>
    </item>
    <item>
      <title>Re: calculating frequency and transpose variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/calculating-frequency-and-transpose-variable/m-p/678929#M205006</link>
      <description>&lt;P&gt;Okay Thanks&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/339736"&gt;@mazouz&lt;/a&gt;&amp;nbsp; Please try the above and see if that works&lt;/P&gt;</description>
      <pubDate>Mon, 24 Aug 2020 16:54:33 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/calculating-frequency-and-transpose-variable/m-p/678929#M205006</guid>
      <dc:creator>novinosrin</dc:creator>
      <dc:date>2020-08-24T16:54:33Z</dc:date>
    </item>
    <item>
      <title>Re: calculating frequency and transpose variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/calculating-frequency-and-transpose-variable/m-p/678935#M205011</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
	input var1 $ var2 $ VAR3 $;
	CARDS;
ok ok ko
ko ok ko
ok ok ok
ok ok ok
ok ok ko
ko ok ok
ok ok ok
ok ok ko
;
run;

*recode to 0/1;

data have_view/ view=have_view;
	set have;
	array _orig(*) $ var1-var3;
	array _new(*) new_var1-new_var3;

	do i=1 to dim(_orig);

		if _orig(i)='ok' then
			_new(i)=1;
		else
			_new(i)=0;
	end;
run;

*summarize;
ods select none;

proc means data=have_view N MEAN STACKODS;
	var new_var1-new_var3;
	ods output summary=summarized;
run;

ods select all;
*clean up for display/formatting;

data want;
	set summarized;
	PCT_KO=1-mean;
	PCT_OK=mean;
	format PCT_KO PCT_OK percent11.1;
	keep Variable PCT_KO PCT_OK;
run;

proc print data=want;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;1. Convert OK/KO to 0/1&lt;/P&gt;
&lt;P&gt;2. Summarize using PROC MEANS&lt;/P&gt;
&lt;P&gt;3. Format for display&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;If you had another variable that uniquely identified each row, a PROC TRANSPOSE could be used which would make this slightly simpler but this works as well.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 24 Aug 2020 17:01:54 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/calculating-frequency-and-transpose-variable/m-p/678935#M205011</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2020-08-24T17:01:54Z</dc:date>
    </item>
    <item>
      <title>Re: calculating frequency and transpose variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/calculating-frequency-and-transpose-variable/m-p/678955#M205019</link>
      <description>&lt;P&gt;You can TRANSPOSE, compute and TRANSPOSE&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Example:&lt;/P&gt;
&lt;PRE&gt;data have;
input var1 $ var2 $ VAR3 $;
CARDS;
ok ok ko
ko ok ko
ok ok ok
ok ok ok
ok ok ko
ko ok ok
ok ok ok
ok ok ko
zz ok aa
;
run;

data haver/view=haver;
  rownum+1;
  set have;
run;

proc transpose data=haver out=stage1;
  by rownum;
  var var1-var3;
run;

proc sql;
  create table percents as
  select  
    _name_ label=' ', col1, N/SUM(N)*100 as percent  format=5.2
  from 
  ( select _name_, COL1, count(*) as N
    from stage1
    group by _name_, COL1
  ) as ss
  group by _name_
  ;
quit;

proc transpose data=percents out=want suffix=_pct;
  by _name_;
  id COL1;
  var percent;
run;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="RichardADeVenezia_1-1598292920738.png" style="width: 400px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/48585i0423115EA2D066D9/image-size/medium?v=v2&amp;amp;px=400" role="button" title="RichardADeVenezia_1-1598292920738.png" alt="RichardADeVenezia_1-1598292920738.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 24 Aug 2020 18:15:49 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/calculating-frequency-and-transpose-variable/m-p/678955#M205019</guid>
      <dc:creator>RichardDeVen</dc:creator>
      <dc:date>2020-08-24T18:15:49Z</dc:date>
    </item>
    <item>
      <title>Re: calculating frequency and transpose variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/calculating-frequency-and-transpose-variable/m-p/678992#M205028</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want(keep=varname prct_ok prct_ko);

   if _N_ = 1 then do;
      dcl hash h();
      h.definekey("_I_");
      h.definedata("ok", "ko");
      h.definedone();
   end;

   set have end=z;
   array v $ var1-var3;

   do over v;
      rc = h.find();
      ok = ifn(v = 'ok', sum(ok, 1), ok);
      ko = ifn(v = 'ko', sum(ko, 1), ko);
      h.replace();
   end;

   if z then do over v;
      rc = h.find();
      varname = vname(v);
      prct_ok = max(0, divide(ok, sum(ok, ko)));
      prct_ko = max(0, divide(ko, sum(ok, ko)));
      output;
   end;
   
run;
&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Mon, 24 Aug 2020 20:28:09 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/calculating-frequency-and-transpose-variable/m-p/678992#M205028</guid>
      <dc:creator>PeterClemmensen</dc:creator>
      <dc:date>2020-08-24T20:28:09Z</dc:date>
    </item>
    <item>
      <title>Re: calculating frequency and transpose variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/calculating-frequency-and-transpose-variable/m-p/679107#M205060</link>
      <description>&lt;P&gt;Thank you! all solution works but the fast one is the solution using proc means&lt;/P&gt;</description>
      <pubDate>Tue, 25 Aug 2020 08:22:08 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/calculating-frequency-and-transpose-variable/m-p/679107#M205060</guid>
      <dc:creator>mazouz</dc:creator>
      <dc:date>2020-08-25T08:22:08Z</dc:date>
    </item>
    <item>
      <title>Re: calculating frequency and transpose variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/calculating-frequency-and-transpose-variable/m-p/679108#M205061</link>
      <description>&lt;P&gt;I want to add NOPRINT, I try to add it in proc mean but don't work&amp;nbsp;&lt;/P&gt;&lt;P&gt;I want only data set no report&lt;/P&gt;</description>
      <pubDate>Tue, 25 Aug 2020 08:25:01 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/calculating-frequency-and-transpose-variable/m-p/679108#M205061</guid>
      <dc:creator>mazouz</dc:creator>
      <dc:date>2020-08-25T08:25:01Z</dc:date>
    </item>
    <item>
      <title>Re: calculating frequency and transpose variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/calculating-frequency-and-transpose-variable/m-p/679199#M205094</link>
      <description>ODS SELECT NONE/SELECT ALL should have taken care of that. Did you remove those lines from the code? They prevent the display from showing. Or do you need to drop the PROC PRINT set of code?</description>
      <pubDate>Tue, 25 Aug 2020 16:35:06 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/calculating-frequency-and-transpose-variable/m-p/679199#M205094</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2020-08-25T16:35:06Z</dc:date>
    </item>
    <item>
      <title>Re: calculating frequency and transpose variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/calculating-frequency-and-transpose-variable/m-p/679372#M205131</link>
      <description>I add this ods _all_ close; and it worked</description>
      <pubDate>Wed, 26 Aug 2020 07:47:45 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/calculating-frequency-and-transpose-variable/m-p/679372#M205131</guid>
      <dc:creator>mazouz</dc:creator>
      <dc:date>2020-08-26T07:47:45Z</dc:date>
    </item>
  </channel>
</rss>

