<?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 Table look up in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Table-look-up/m-p/490818#M128542</link>
    <description>&lt;P&gt;Hello all,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I am trying to calculate percentiles using two datasets, one of which is a standard dataset and the other dataset has systolic and diastolic bp values for each subject .I want to check each observation in the subject dataset against the standard dataset to find a match for the percentile:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Standard dataset:&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;age&lt;/TD&gt;&lt;TD&gt;percentile&lt;/TD&gt;&lt;TD&gt;val&lt;/TD&gt;&lt;TD&gt;ht&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;n1&lt;/TD&gt;&lt;TD&gt;45&lt;/TD&gt;&lt;TD&gt;50.5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;n2&lt;/TD&gt;&lt;TD&gt;55&lt;/TD&gt;&lt;TD&gt;50.5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;n3&lt;/TD&gt;&lt;TD&gt;65&lt;/TD&gt;&lt;TD&gt;50.5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;n4&lt;/TD&gt;&lt;TD&gt;75&lt;/TD&gt;&lt;TD&gt;50.5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;n5&lt;/TD&gt;&lt;TD&gt;85&lt;/TD&gt;&lt;TD&gt;50.5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;n1&lt;/TD&gt;&lt;TD&gt;49&lt;/TD&gt;&lt;TD&gt;55.8&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;n2&lt;/TD&gt;&lt;TD&gt;54&lt;/TD&gt;&lt;TD&gt;55.8&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;n3&lt;/TD&gt;&lt;TD&gt;66&lt;/TD&gt;&lt;TD&gt;55.8&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;n4&lt;/TD&gt;&lt;TD&gt;75&lt;/TD&gt;&lt;TD&gt;55.8&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;n5&lt;/TD&gt;&lt;TD&gt;88&lt;/TD&gt;&lt;TD&gt;55.8&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;subject dataset example:&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;id&lt;/TD&gt;&lt;TD&gt;ht&lt;/TD&gt;&lt;TD&gt;val&lt;/TD&gt;&lt;TD&gt;age&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;xyz&lt;/TD&gt;&lt;TD&gt;52&lt;/TD&gt;&lt;TD&gt;50&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;abc&lt;/TD&gt;&lt;TD&gt;56&lt;/TD&gt;&lt;TD&gt;71&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;I want :&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;id&lt;/TD&gt;&lt;TD&gt;ht&lt;/TD&gt;&lt;TD&gt;val&lt;/TD&gt;&lt;TD&gt;age&lt;/TD&gt;&lt;TD&gt;percentile&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;xyz&lt;/TD&gt;&lt;TD&gt;52&lt;/TD&gt;&lt;TD&gt;50&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;n1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;abc&lt;/TD&gt;&lt;TD&gt;56&lt;/TD&gt;&lt;TD&gt;71&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;n3&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;&lt;EM&gt;Because the height for subject xyx is 52 which is less than 55.8 from the standard table it would fall under the 50.5 category as I need to consider the lower bound values and the val for that subject is 50 which fall under 45 as it is less than 55&amp;nbsp; it would be categorized under n1. The actual data consists of many ages with varying heights. Any help would be appreciated. Thank you.&lt;/EM&gt;&lt;/P&gt;</description>
    <pubDate>Wed, 29 Aug 2018 12:43:39 GMT</pubDate>
    <dc:creator>Div_sas</dc:creator>
    <dc:date>2018-08-29T12:43:39Z</dc:date>
    <item>
      <title>Table look up</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Table-look-up/m-p/490818#M128542</link>
      <description>&lt;P&gt;Hello all,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I am trying to calculate percentiles using two datasets, one of which is a standard dataset and the other dataset has systolic and diastolic bp values for each subject .I want to check each observation in the subject dataset against the standard dataset to find a match for the percentile:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Standard dataset:&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;age&lt;/TD&gt;&lt;TD&gt;percentile&lt;/TD&gt;&lt;TD&gt;val&lt;/TD&gt;&lt;TD&gt;ht&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;n1&lt;/TD&gt;&lt;TD&gt;45&lt;/TD&gt;&lt;TD&gt;50.5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;n2&lt;/TD&gt;&lt;TD&gt;55&lt;/TD&gt;&lt;TD&gt;50.5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;n3&lt;/TD&gt;&lt;TD&gt;65&lt;/TD&gt;&lt;TD&gt;50.5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;n4&lt;/TD&gt;&lt;TD&gt;75&lt;/TD&gt;&lt;TD&gt;50.5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;n5&lt;/TD&gt;&lt;TD&gt;85&lt;/TD&gt;&lt;TD&gt;50.5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;n1&lt;/TD&gt;&lt;TD&gt;49&lt;/TD&gt;&lt;TD&gt;55.8&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;n2&lt;/TD&gt;&lt;TD&gt;54&lt;/TD&gt;&lt;TD&gt;55.8&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;n3&lt;/TD&gt;&lt;TD&gt;66&lt;/TD&gt;&lt;TD&gt;55.8&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;n4&lt;/TD&gt;&lt;TD&gt;75&lt;/TD&gt;&lt;TD&gt;55.8&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;n5&lt;/TD&gt;&lt;TD&gt;88&lt;/TD&gt;&lt;TD&gt;55.8&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;subject dataset example:&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;id&lt;/TD&gt;&lt;TD&gt;ht&lt;/TD&gt;&lt;TD&gt;val&lt;/TD&gt;&lt;TD&gt;age&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;xyz&lt;/TD&gt;&lt;TD&gt;52&lt;/TD&gt;&lt;TD&gt;50&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;abc&lt;/TD&gt;&lt;TD&gt;56&lt;/TD&gt;&lt;TD&gt;71&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;I want :&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;id&lt;/TD&gt;&lt;TD&gt;ht&lt;/TD&gt;&lt;TD&gt;val&lt;/TD&gt;&lt;TD&gt;age&lt;/TD&gt;&lt;TD&gt;percentile&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;xyz&lt;/TD&gt;&lt;TD&gt;52&lt;/TD&gt;&lt;TD&gt;50&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;n1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;abc&lt;/TD&gt;&lt;TD&gt;56&lt;/TD&gt;&lt;TD&gt;71&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;n3&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;&lt;EM&gt;Because the height for subject xyx is 52 which is less than 55.8 from the standard table it would fall under the 50.5 category as I need to consider the lower bound values and the val for that subject is 50 which fall under 45 as it is less than 55&amp;nbsp; it would be categorized under n1. The actual data consists of many ages with varying heights. Any help would be appreciated. Thank you.&lt;/EM&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 29 Aug 2018 12:43:39 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Table-look-up/m-p/490818#M128542</guid>
      <dc:creator>Div_sas</dc:creator>
      <dc:date>2018-08-29T12:43:39Z</dc:date>
    </item>
    <item>
      <title>Re: Table look up</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Table-look-up/m-p/490824#M128545</link>
      <description>&lt;P&gt;&lt;U&gt;&lt;STRONG&gt;Post test data in the form of a datastep!!&lt;/STRONG&gt;&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;First up, the standard dataset, if you have an upper and lower bound, then it makes sense to keep these in one row:&lt;/P&gt;
&lt;P&gt;age percentile val&amp;nbsp; lower_ht upper_ht&lt;/P&gt;
&lt;P&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp;n1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;?&amp;nbsp; &amp;nbsp; 50.5&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 55.8&lt;/P&gt;
&lt;P&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp;n2&amp;nbsp; &amp;nbsp; ...&lt;/P&gt;
&lt;P&gt;That is a sensible model and will then allow you to merge onto your data based on age=age and lower_ht &amp;lt;= ht &amp;lt;= upper_ht.&lt;/P&gt;
&lt;P&gt;The problem lies in the data modelling aspect of the "standard dataset", but you can sort this by sorting it by age, percentile, ht, then datastep first obs=lower, second=higher.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 29 Aug 2018 13:10:05 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Table-look-up/m-p/490824#M128545</guid>
      <dc:creator>RW9</dc:creator>
      <dc:date>2018-08-29T13:10:05Z</dc:date>
    </item>
    <item>
      <title>Re: Table look up</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Table-look-up/m-p/490829#M128547</link>
      <description>&lt;P&gt;sorry about that. Here's the data in&amp;nbsp;datastep:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data std;
input age percentile $ val ht;
datalines;
1 n1 45 50.5 
1 n2 55 50.5 
1 n3 65 50.5 
1 n4 75 50.5 
1 n5 85 50.5 
1 n1 49 55.8 
1 n2 54 55.8 
1 n3 66 55.8 
1 n4 75 55.8 
1 n5 88 55.8 
;
run;

data subj;
input id $ ht val age;
datalines;
xyz 52 50 1 
abc 56 71 1 
;
run;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;I will need upper and lower bound values for height&amp;nbsp; and val as well. Thank you!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 29 Aug 2018 13:27:11 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Table-look-up/m-p/490829#M128547</guid>
      <dc:creator>Div_sas</dc:creator>
      <dc:date>2018-08-29T13:27:11Z</dc:date>
    </item>
    <item>
      <title>Re: Table look up</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Table-look-up/m-p/490844#M128561</link>
      <description>&lt;P&gt;Well, it doesn't make sense, as all the ranges are the same? Maybe it is the val part I am missing?&amp;nbsp; Anyways some code towards what you want:&lt;/P&gt;
&lt;PRE&gt;data std;
  input age percentile $ val ht;
datalines;
1 n1 45 50.5 
1 n2 55 50.5 
1 n3 65 50.5 
1 n4 75 50.5 
1 n5 85 50.5 
1 n1 49 55.8 
1 n2 54 55.8 
1 n3 66 55.8 
1 n4 75 55.8 
1 n5 88 55.8 
;
run;

proc sort data=std;
  by age percentile ht;
run;

data std_upd (keep=age percentile lower higher);
  set std;
  by age percentile;
  retain lower higher;
  if first.percentile then lower=ht;
  if last.percentile then do;
    higher=ht;
    output;
  end;
run;
  
data subj;
  input id $ ht val age;
datalines;
xyz 52 50 1 
abc 56 71 1 
;
run;

proc sql;
  create table want as 
  select a.*,
         b.percentile,
         b.lower,
         b.higher
  from   subj a
  left join std_upd b
  on     a.age=b.age
  and    b.lower &amp;lt;= a.ht &amp;lt;= b.higher;
quit;&lt;/PRE&gt;</description>
      <pubDate>Wed, 29 Aug 2018 13:53:11 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Table-look-up/m-p/490844#M128561</guid>
      <dc:creator>RW9</dc:creator>
      <dc:date>2018-08-29T13:53:11Z</dc:date>
    </item>
  </channel>
</rss>

