<?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: Merge multiple tables / many-to-many merge / unbalanced datasets in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Merge-multiple-tables-many-to-many-merge-unbalanced-datasets/m-p/569858#M160633</link>
    <description>&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/132289"&gt;@Cruise&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;
&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/11562"&gt;@Kurt_Bremser&lt;/a&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I understand execpt how to create format from STANDARD and applying the format to description to derive value.&lt;/P&gt;
&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Since the value you want to create is a number then create an INFORMAT and use the INPUT() function to create the value.&lt;/P&gt;
&lt;P&gt;To make a format/informat from data create a dataset in the format needed for the CNTLIN= option of PROC FORMAT.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;DATA STANDARD; 
INPUT DESCRIPTION $ VALUE;
CARDS;
A 0.3
B 0.25
C 0.22
;

data fmt;
 fmtname='STANDARD';
 type='I';
 set standard;
 rename description=start value=label;
run;
proc format cntlin=fmt;
run;


data test;
  input description $ ;
  value=input(description,standard.);
cards;
A
B
C
;

proc print;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;PRE&gt;Obs    description    value

 1          A          0.30
 2          B          0.25
 3          C          0.22&lt;/PRE&gt;</description>
    <pubDate>Fri, 28 Jun 2019 15:03:19 GMT</pubDate>
    <dc:creator>Tom</dc:creator>
    <dc:date>2019-06-28T15:03:19Z</dc:date>
    <item>
      <title>Merge multiple tables / many-to-many merge / unbalanced datasets</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Merge-multiple-tables-many-to-many-merge-unbalanced-datasets/m-p/569787#M160603</link>
      <description>&lt;P&gt;Hello Folks:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I have three tables sorted by two categorical values 'index' and 'description' and one table by 'description' only. Below is the desired output. I I did many-to-many merge while not having 'index' variable in the STANDARD dataset.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This seems to be working on small mock datasets. However, my actual datasets are large.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;My question is: Do you have any comments if I'm doing merge right here? Is it safe approach to go ahead and apply to my actual large datasets?&lt;/P&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="TABLES MERGE.png" style="width: 380px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/30618iCB621F93DF9614A7/image-size/large?v=v2&amp;amp;px=999" role="button" title="TABLES MERGE.png" alt="TABLES MERGE.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;DATA ONE; 
INPUT INDEX	DESCRIPTION $ VALUE1;
CARDS;
1	A	0.1
1	B	0.2
1	C	0.25
2	A	0.33
2	B	0.41
2	C	0.48
3	A	0.56
3	B	0.63
3	C	0.71
;

DATA TWO; 
INPUT INDEX	DESCRIPTION $ VALUE2;
CARDS;
1	A	0.1
1	B	0.2
1	C	0.25
2	A	0.33
2	B	0.41
2	C	0.48
3	A	0.56
3	B	0.63
3	C	0.71
;

DATA THREE; 
INPUT INDEX	DESCRIPTION $ VALUE3;
CARDS;
1	A	0.1
1	B	0.2
1	C	0.25
2	A	0.33
2	B	0.41
2	C	0.48
3	A	0.56
3	B	0.63
3	C	0.71
;

DATA STANDARD; 
INPUT DESCRIPTION $ VALUE;
CARDS;
A	0.3
B	0.25
C	0.22
;

PROC SORT DATA=ONE;
BY DESCRIPTION INDEX;
PROC SORT DATA=TWO;
BY DESCRIPTION INDEX;
PROC SORT DATA=THREE;
BY DESCRIPTION INDEX;
PROC SORT DATA=STANDARD;
BY DESCRIPTION;

DATA MERGED;
MERGE ONE TWO THREE STANDARD;
BY DESCRIPTION;
RUN; 
PROC PRINT; RUN;

PROC SORT DATA=MERGED;
BY INDEX DESCRIPTION;
RUN;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Fri, 28 Jun 2019 13:37:59 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Merge-multiple-tables-many-to-many-merge-unbalanced-datasets/m-p/569787#M160603</guid>
      <dc:creator>Cruise</dc:creator>
      <dc:date>2019-06-28T13:37:59Z</dc:date>
    </item>
    <item>
      <title>Re: Merge multiple tables / many-to-many merge / unbalanced datasets</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Merge-multiple-tables-many-to-many-merge-unbalanced-datasets/m-p/569789#M160604</link>
      <description>&lt;P&gt;It's not safe, and can generate incorrect matches.&amp;nbsp; For example, try removing an observation from ONE, TWO, or THREE, and see if you like the result.&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;In a small sample, everything matches up.&amp;nbsp; In larger data sets, it's unlikely that there will be 100% matches for INDEX and DESCRIPTION.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Unfortunately, you need to match ONE, TWO, and THREE by both INDEX and DESCRIPTION.&amp;nbsp; Then you can add STANDARD in a separate step.&lt;/P&gt;</description>
      <pubDate>Fri, 28 Jun 2019 13:43:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Merge-multiple-tables-many-to-many-merge-unbalanced-datasets/m-p/569789#M160604</guid>
      <dc:creator>Astounding</dc:creator>
      <dc:date>2019-06-28T13:43:35Z</dc:date>
    </item>
    <item>
      <title>Re: Merge multiple tables / many-to-many merge / unbalanced datasets</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Merge-multiple-tables-many-to-many-merge-unbalanced-datasets/m-p/569795#M160607</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/4954"&gt;@Astounding&lt;/a&gt; this might explain why my summary plot is far off. How about to duplicate the STANDARD dataset by the level of INDEX in the three other datasets and merge?&amp;nbsp; In other words, bringing STANDARD table to the same level of other datasets for one-to-one merge?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 28 Jun 2019 13:49:18 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Merge-multiple-tables-many-to-many-merge-unbalanced-datasets/m-p/569795#M160607</guid>
      <dc:creator>Cruise</dc:creator>
      <dc:date>2019-06-28T13:49:18Z</dc:date>
    </item>
    <item>
      <title>Re: Merge multiple tables / many-to-many merge / unbalanced datasets</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Merge-multiple-tables-many-to-many-merge-unbalanced-datasets/m-p/569828#M160618</link>
      <description>&lt;P&gt;Will PROC SQL be a bad idea? Just curious .... also you did not mention how big is the data you have.&lt;/P&gt;&lt;P&gt;This is the question I have (to others seeing this message as well) .. is it better to use MERGE in DATA step or use PROC SQL?&lt;/P&gt;&lt;P&gt;Under what conditions we should sway towards one method rather than the other?&lt;/P&gt;&lt;P&gt;SAS experts here please.&lt;/P&gt;</description>
      <pubDate>Fri, 28 Jun 2019 14:11:12 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Merge-multiple-tables-many-to-many-merge-unbalanced-datasets/m-p/569828#M160618</guid>
      <dc:creator>koyelghosh</dc:creator>
      <dc:date>2019-06-28T14:11:12Z</dc:date>
    </item>
    <item>
      <title>Re: Merge multiple tables / many-to-many merge / unbalanced datasets</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Merge-multiple-tables-many-to-many-merge-unbalanced-datasets/m-p/569841#M160625</link>
      <description>&lt;P&gt;My personal rule-of-thumb: use SQL when I positively need it (eg cartesian joins). Otherwise use proc sort and data steps.&lt;/P&gt;
&lt;P&gt;Also see Maxim 10.&lt;/P&gt;</description>
      <pubDate>Fri, 28 Jun 2019 14:45:32 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Merge-multiple-tables-many-to-many-merge-unbalanced-datasets/m-p/569841#M160625</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2019-06-28T14:45:32Z</dc:date>
    </item>
    <item>
      <title>Re: Merge multiple tables / many-to-many merge / unbalanced datasets</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Merge-multiple-tables-many-to-many-merge-unbalanced-datasets/m-p/569844#M160626</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/11562"&gt;@Kurt_Bremser&lt;/a&gt;&amp;nbsp;Thank you.&lt;/P&gt;</description>
      <pubDate>Fri, 28 Jun 2019 14:48:45 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Merge-multiple-tables-many-to-many-merge-unbalanced-datasets/m-p/569844#M160626</guid>
      <dc:creator>koyelghosh</dc:creator>
      <dc:date>2019-06-28T14:48:45Z</dc:date>
    </item>
    <item>
      <title>Re: Merge multiple tables / many-to-many merge / unbalanced datasets</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Merge-multiple-tables-many-to-many-merge-unbalanced-datasets/m-p/569846#M160628</link>
      <description>&lt;P&gt;Create a format from table STANDARD.&lt;/P&gt;
&lt;P&gt;Sort ONE, TWO and THREE by index and description.&lt;/P&gt;
&lt;P&gt;Merge ONE, TWO and THREE by index and description, apply the format to description to derive value.&lt;/P&gt;</description>
      <pubDate>Fri, 28 Jun 2019 14:50:26 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Merge-multiple-tables-many-to-many-merge-unbalanced-datasets/m-p/569846#M160628</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2019-06-28T14:50:26Z</dc:date>
    </item>
    <item>
      <title>Re: Merge multiple tables / many-to-many merge / unbalanced datasets</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Merge-multiple-tables-many-to-many-merge-unbalanced-datasets/m-p/569847#M160629</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/11562"&gt;@Kurt_Bremser&lt;/a&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I understand execpt how to create format from STANDARD and applying the format to description to derive value.&lt;/P&gt;</description>
      <pubDate>Fri, 28 Jun 2019 14:52:31 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Merge-multiple-tables-many-to-many-merge-unbalanced-datasets/m-p/569847#M160629</guid>
      <dc:creator>Cruise</dc:creator>
      <dc:date>2019-06-28T14:52:31Z</dc:date>
    </item>
    <item>
      <title>Re: Merge multiple tables / many-to-many merge / unbalanced datasets</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Merge-multiple-tables-many-to-many-merge-unbalanced-datasets/m-p/569858#M160633</link>
      <description>&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/132289"&gt;@Cruise&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;
&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/11562"&gt;@Kurt_Bremser&lt;/a&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I understand execpt how to create format from STANDARD and applying the format to description to derive value.&lt;/P&gt;
&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Since the value you want to create is a number then create an INFORMAT and use the INPUT() function to create the value.&lt;/P&gt;
&lt;P&gt;To make a format/informat from data create a dataset in the format needed for the CNTLIN= option of PROC FORMAT.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;DATA STANDARD; 
INPUT DESCRIPTION $ VALUE;
CARDS;
A 0.3
B 0.25
C 0.22
;

data fmt;
 fmtname='STANDARD';
 type='I';
 set standard;
 rename description=start value=label;
run;
proc format cntlin=fmt;
run;


data test;
  input description $ ;
  value=input(description,standard.);
cards;
A
B
C
;

proc print;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;PRE&gt;Obs    description    value

 1          A          0.30
 2          B          0.25
 3          C          0.22&lt;/PRE&gt;</description>
      <pubDate>Fri, 28 Jun 2019 15:03:19 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Merge-multiple-tables-many-to-many-merge-unbalanced-datasets/m-p/569858#M160633</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2019-06-28T15:03:19Z</dc:date>
    </item>
    <item>
      <title>Re: Merge multiple tables / many-to-many merge / unbalanced datasets</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Merge-multiple-tables-many-to-many-merge-unbalanced-datasets/m-p/569859#M160634</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data cntlin;
set standard (rename=(description=start value=label));
fmtname = 'myfmt';
type = 'C';
run;

proc format cntlin=cntlin;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Now you can do&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;value = input(put(description,$myfmt.),best.);&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;It's probably better to create an&amp;nbsp;&lt;EM&gt;inf&lt;/EM&gt;ormat and use only the input() function, but I'm not in front of SAS right now to test that. I only know formats by heart, but not informats &lt;span class="lia-unicode-emoji" title=":winking_face:"&gt;😉&lt;/span&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 28 Jun 2019 15:05:04 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Merge-multiple-tables-many-to-many-merge-unbalanced-datasets/m-p/569859#M160634</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2019-06-28T15:05:04Z</dc:date>
    </item>
    <item>
      <title>Re: Merge multiple tables / many-to-many merge / unbalanced datasets</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Merge-multiple-tables-many-to-many-merge-unbalanced-datasets/m-p/569904#M160656</link>
      <description>&lt;P&gt;Sorry, if I wasn't clear. My goal was to duplicate STANDARD data to the level INDEX in the other datasets so that I can do one-to-one merge. Right now STANDARD has 3 rows and ONE, TWO and THREE datasets have total 9 rows (3 descriptions by 3 index). If I duplicate STANDARD 3 times by adding INDEX variable for each duplicates then I'll be able to do one-to-one merge.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;However, I find Astounding's solution easier since I don't bother merging ONE, TWO, THREE by INDEX and DECSRIPTION variables first and then merge STANDARD to the resulting merged dataset by DESCRIPTION variable.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Please let me know if I'm missing something here.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 28 Jun 2019 17:28:16 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Merge-multiple-tables-many-to-many-merge-unbalanced-datasets/m-p/569904#M160656</guid>
      <dc:creator>Cruise</dc:creator>
      <dc:date>2019-06-28T17:28:16Z</dc:date>
    </item>
    <item>
      <title>Re: Merge multiple tables / many-to-many merge / unbalanced datasets</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Merge-multiple-tables-many-to-many-merge-unbalanced-datasets/m-p/569938#M160668</link>
      <description>If formats are too difficult, sort and merge BY DESCRIPTION INDEX (not BY INDEX DESCRIPTION).  Then you can merge in summary data BY DESCRIPTION.</description>
      <pubDate>Fri, 28 Jun 2019 18:39:33 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Merge-multiple-tables-many-to-many-merge-unbalanced-datasets/m-p/569938#M160668</guid>
      <dc:creator>Astounding</dc:creator>
      <dc:date>2019-06-28T18:39:33Z</dc:date>
    </item>
    <item>
      <title>Re: Merge multiple tables / many-to-many merge / unbalanced datasets</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Merge-multiple-tables-many-to-many-merge-unbalanced-datasets/m-p/569943#M160670</link>
      <description>Thank you. I will.</description>
      <pubDate>Fri, 28 Jun 2019 18:58:42 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Merge-multiple-tables-many-to-many-merge-unbalanced-datasets/m-p/569943#M160670</guid>
      <dc:creator>Cruise</dc:creator>
      <dc:date>2019-06-28T18:58:42Z</dc:date>
    </item>
  </channel>
</rss>

