<?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 Re: Identifying secondary peers in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Identifying-secondary-peers/m-p/715279#M220924</link>
    <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/16961"&gt;@ChrisNZ&lt;/a&gt;&amp;nbsp; thank you. This solution worked for me after building on your code to cater for up to 20 SIC codes in each row and up to 200 secondary peers.&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;regards,&lt;/P&gt;&lt;P&gt;Adnan&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Fri, 29 Jan 2021 14:26:07 GMT</pubDate>
    <dc:creator>adnany</dc:creator>
    <dc:date>2021-01-29T14:26:07Z</dc:date>
    <item>
      <title>Identifying secondary peers</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Identifying-secondary-peers/m-p/714872#M220756</link>
      <description>&lt;P&gt;Hi all,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have data on firm id (e.g., 1,2,3), Year (e.g., 2015, 2016) and SIC membership (Standard Industrial Codes), such that each firm may be a member of multiple SIC codes in a given year. These SIC codes represent a firm’s primary peers - that is, firms with which it competes directly by being present in these SIC codes each year. Also, a firm’s SIC membership may vary from year to year (e.g., firm 1 competes across 6 SICs in 2015 but only 3 in 2016).&lt;/P&gt;&lt;P&gt;I want to construct variables for secondary peer SIC codes (SPeer1, SPeer2… SPeern) for each firm in each year – that is, those SIC codes in which a firm does not directly compete (that is, a firm does not belong to these SIC codes in a year), but its primary peers compete with other firms in these SIC codes. For example, secondary peer SIC codes for firm 1 in 2015 are 4517, 4518, 4519, 4521 and 4522 because firm 1 does not directly compete in thee SIC codes in the year 2015, but its primary peers, firm 2 (competing with firm 1 in 4512 and 4516) and firm 3 (competing with firm 1 in 4513) compete with other firms in these SIC codes in 2015.&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;F&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;Year&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;SIC1&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;SIC2&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;SIC3&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;SIC4&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;SIC5&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;SIC6&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;SPeer1&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;SPeer2&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;SPeer3&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;SPeer4&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;SPeer5&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4511&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4512&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4513&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4514&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4515&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4516&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4517&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4518&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4519&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4521&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4522&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;2&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4512&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4516&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4517&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4518&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4519&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4511&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4513&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4514&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4515&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;3&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4513&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4520&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4521&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4522&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4511&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4512&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4516&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4518&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;2016&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4511&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4512&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4513&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4518&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4519&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;2&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;2016&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4512&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4519&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4511&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4513&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;3&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;2016&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4513&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4518&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4511&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4512&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Will appreciate if you may help me with a code to construct the secondary peer SIC Codes.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Adnan&lt;/P&gt;</description>
      <pubDate>Thu, 28 Jan 2021 04:23:05 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Identifying-secondary-peers/m-p/714872#M220756</guid>
      <dc:creator>adnany</dc:creator>
      <dc:date>2021-01-28T04:23:05Z</dc:date>
    </item>
    <item>
      <title>Re: Identifying secondary peers</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Identifying-secondary-peers/m-p/715146#M220872</link>
      <description>&lt;P&gt;1.Please provide data in usable form. For example see &lt;A href="https://blogs.sas.com/content/sastraining/2016/03/11/jedi-sas-tricks-data-to-data-step-macro/" target="_self"&gt;here&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;2. Another example where a &lt;A href="https://communities.sas.com/t5/SASware-Ballot-Ideas/create-string-summary-functions/idi-p/288035" target="_self"&gt;string aggregation functions&lt;/A&gt; would be very useful. Come on SAS, just do it!&lt;/P&gt;
&lt;P&gt;3. This seems to work:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data HAVE;
 infile cards missover;
 input F YEAR SIC1 SIC2 SIC3;
 cards;
1 2016 4511 4512 4513
2 2016 4512 4519
3 2016 4513 4518
run;

proc sql;
  create table CARTESIAN as
  select a.*, b.F as BF, b.SIC1 as S1, b.SIC2 as S2, b.SIC3 as S3  
  from HAVE a
      ,HAVE b
  where a.YEAR eq b.YEAR
      &amp;amp; a.F    ne b.F
      &amp;amp; ( (a.SIC1 &amp;amp; (a.SIC1=S1 | a.SIC1=S2 | a.SIC1=S3))
        | (a.SIC2 &amp;amp; (a.SIC2=S1 | a.SIC2=S2 | a.SIC2=S3)) 
        | (a.SIC3 &amp;amp; (a.SIC3=S1 | a.SIC3=S2 | a.SIC3=S3))
        )
  order by a.F, a.YEAR; 
quit;

data WANT;
  set CARTESIAN;
  by F YEAR;
  array SA[*] SIC1-SIC3;
  array SB[*] S1-S3;
  array SPEER[6];
  retain SPEER:;
  do I=1 to dim(SB) while ( SB[I] ); 
    if ^index(catx('|',of SA[*]), cats(SB[I])) &amp;amp; ^index(catx('|',of SPEER[*]), cats(SB[I])) then do; 
      IDX+1;                                     
      SPEER[IDX]=SB[I];             
    end;
  end;
  if last.YEAR then do;
     output;
     call missing(of SPEER[*], IDX);
  end;
  drop I IDX BF S1-S3 ;
run;

proc print noobs;run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;DIV class="branch"&gt;&lt;BR /&gt;
&lt;DIV&gt;
&lt;DIV align="left"&gt;
&lt;TABLE class="table" summary="Procedure Print: Data Set WORK.WANT" frame="box" rules="all" cellspacing="0" cellpadding="5"&gt;&lt;COLGROUP&gt; &lt;COL /&gt; &lt;COL /&gt; &lt;COL /&gt; &lt;COL /&gt; &lt;COL /&gt; &lt;COL /&gt; &lt;COL /&gt; &lt;COL /&gt; &lt;COL /&gt; &lt;COL /&gt; &lt;COL /&gt;&lt;/COLGROUP&gt;
&lt;THEAD&gt;
&lt;TR&gt;
&lt;TH class="r header" scope="col"&gt;F&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;YEAR&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;SIC1&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;SIC2&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;SIC3&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;SPEER1&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;SPEER2&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;SPEER3&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;SPEER4&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;SPEER5&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;SPEER6&lt;/TH&gt;
&lt;/TR&gt;
&lt;/THEAD&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;TD class="r data"&gt;2016&lt;/TD&gt;
&lt;TD class="r data"&gt;4511&lt;/TD&gt;
&lt;TD class="r data"&gt;4512&lt;/TD&gt;
&lt;TD class="r data"&gt;4513&lt;/TD&gt;
&lt;TD class="r data"&gt;4518&lt;/TD&gt;
&lt;TD class="r data"&gt;4519&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="r data"&gt;2&lt;/TD&gt;
&lt;TD class="r data"&gt;2016&lt;/TD&gt;
&lt;TD class="r data"&gt;4512&lt;/TD&gt;
&lt;TD class="r data"&gt;4519&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="r data"&gt;4511&lt;/TD&gt;
&lt;TD class="r data"&gt;4513&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="r data"&gt;3&lt;/TD&gt;
&lt;TD class="r data"&gt;2016&lt;/TD&gt;
&lt;TD class="r data"&gt;4513&lt;/TD&gt;
&lt;TD class="r data"&gt;4518&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="r data"&gt;4511&lt;/TD&gt;
&lt;TD class="r data"&gt;4512&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;</description>
      <pubDate>Thu, 28 Jan 2021 22:44:21 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Identifying-secondary-peers/m-p/715146#M220872</guid>
      <dc:creator>ChrisNZ</dc:creator>
      <dc:date>2021-01-28T22:44:21Z</dc:date>
    </item>
    <item>
      <title>Re: Identifying secondary peers</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Identifying-secondary-peers/m-p/715279#M220924</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/16961"&gt;@ChrisNZ&lt;/a&gt;&amp;nbsp; thank you. This solution worked for me after building on your code to cater for up to 20 SIC codes in each row and up to 200 secondary peers.&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;regards,&lt;/P&gt;&lt;P&gt;Adnan&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 29 Jan 2021 14:26:07 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Identifying-secondary-peers/m-p/715279#M220924</guid>
      <dc:creator>adnany</dc:creator>
      <dc:date>2021-01-29T14:26:07Z</dc:date>
    </item>
  </channel>
</rss>

