<?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: more efficient way to program in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/more-efficient-way-to-program/m-p/92058#M19425</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Then just amend the code so that it works with your data, eg:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;/* (re-) create format based on latest entries in template data set: prepare the source data set for the format */&lt;BR /&gt;proc sql;&lt;BR /&gt;&amp;nbsp; create table fmt as&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; select distinct&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'unit' as fmtname&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , strip(upcase(name)) as start&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , strip(upcase(name)) as end&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , case(type) when 'Rand' then '000' else '123' end as label&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , 'C' as type&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; from template&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;BR /&gt;quit;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 28 Jun 2012 15:15:49 GMT</pubDate>
    <dc:creator>Patrick</dc:creator>
    <dc:date>2012-06-28T15:15:49Z</dc:date>
    <item>
      <title>more efficient way to program</title>
      <link>https://communities.sas.com/t5/SAS-Programming/more-efficient-way-to-program/m-p/92050#M19417</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I have a table that is updated daily with the following values. &lt;BR /&gt;I need to reference these values as global variables in other sas programs. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; ID:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Name:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Type:&lt;/P&gt;&lt;P&gt;101&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Data&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Bytes&lt;BR /&gt;102&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Account&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Rand&lt;BR /&gt;103&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DataValue&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Bytes&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;I currently use the program below and manually add in entries so the problem is that I am not aware of new entries and often overlook it.&lt;BR /&gt;Is there a more efficient way to do this??&lt;BR /&gt;I want to create 2 variables data_unit and rand_unit based on the name and type.&lt;/P&gt;&lt;P&gt;*********************************************************************************************************&lt;BR /&gt;PROC FORMAT LIBRARY=WORK;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp; VALUE $Unit&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'DATA'&amp;nbsp;&amp;nbsp; =&amp;nbsp; '*B'&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'ACCOUNT'=&amp;nbsp; '*R'&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'DATAVALUE'='*B';&lt;BR /&gt;RUN;&lt;/P&gt;&lt;P&gt;%GLOBAL Rand_Unit Data_Unit;&lt;/P&gt;&lt;P&gt;DATA Unit;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; LENGTH Unit_Type $12 Unit_Name $10;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; INPUT Unit_Type 1-12&amp;nbsp; Unit_Name 13-23 ;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; Datalines;&lt;BR /&gt;Data_Unit DATA&lt;BR /&gt;Data_Unit DATAVALUE&lt;BR /&gt;Rand_Unit ACCOUNT&lt;BR /&gt;;;;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;PROC SQL Noprint;&lt;BR /&gt;SELECT QUOTE(TRIM(Unit_Name))INTO :Data_Unit separated BY ',' FROM Unit WHERE Unit_Type='Data_Unit';;&lt;BR /&gt;SELECT QUOTE(TRIM(Unit_Name))INTO :Rand_Unit separated BY ',' FROM Unit WHERE Unit_Type='Rand_Unit';;&lt;BR /&gt;QUIT;&lt;/P&gt;&lt;P&gt;%PUT &amp;amp;Data_Unit;&lt;BR /&gt;%PUT &amp;amp;Rand_Unit;&lt;BR /&gt;*********************************************************************************************************&lt;/P&gt;&lt;P&gt;Please advise, thank you.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 26 Jun 2012 09:51:30 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/more-efficient-way-to-program/m-p/92050#M19417</guid>
      <dc:creator>Havi</dc:creator>
      <dc:date>2012-06-26T09:51:30Z</dc:date>
    </item>
    <item>
      <title>Re: more efficient way to program</title>
      <link>https://communities.sas.com/t5/SAS-Programming/more-efficient-way-to-program/m-p/92051#M19418</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;I don't know what is the output required .&lt;/P&gt;&lt;P&gt;I guess this what you want...&lt;/P&gt;&lt;P&gt;DATA Unit (keep=FMTNAME START END LABEL TYPE);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; LENGTH Unit_Type $12 Unit_Name $10;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; INPUT Unit_Type 1-10&amp;nbsp; Unit_Name 11-23 ;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FMTNAME = 'Type' ;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; START&amp;nbsp;&amp;nbsp; = Unit_Name;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; END&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = START;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LABEL&amp;nbsp;&amp;nbsp; = Unit_Type;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TYPE&amp;nbsp;&amp;nbsp;&amp;nbsp; = 'C' ;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; Datalines;&lt;/P&gt;&lt;P&gt;Data_Unit DATA&lt;/P&gt;&lt;P&gt;Data_Unit DATAVALUE&lt;/P&gt;&lt;P&gt;Rand_Unit ACCOUNT&lt;/P&gt;&lt;P&gt;;;;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;proc format cntlin=unit lib=work; run;&lt;/P&gt;&lt;P&gt; data want;&lt;/P&gt;&lt;P&gt; input ID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Name $ 5-14&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Type $ 15-20;&lt;/P&gt;&lt;P&gt; unit=put(Name,Type.);&lt;/P&gt;&lt;P&gt; cards;&lt;/P&gt;&lt;P&gt;101 DATA&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Bytes&lt;/P&gt;&lt;P&gt;102 ACCOUNT&amp;nbsp;&amp;nbsp; Rand&lt;/P&gt;&lt;P&gt;103 DATAVALUE Bytes&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;Thanks,&lt;/P&gt;&lt;P&gt;Shiva&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 26 Jun 2012 10:55:23 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/more-efficient-way-to-program/m-p/92051#M19418</guid>
      <dc:creator>shivas</dc:creator>
      <dc:date>2012-06-26T10:55:23Z</dc:date>
    </item>
    <item>
      <title>Re: more efficient way to program</title>
      <link>https://communities.sas.com/t5/SAS-Programming/more-efficient-way-to-program/m-p/92052#M19419</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thank you for your response Shivas.&lt;/P&gt;&lt;P&gt;I actually need to read values from the table in order to create global variables.&lt;/P&gt;&lt;P&gt;Using cards/datalines will mean I have to enter data from the table and will not be aware immediately when a new entry is added.&lt;/P&gt;&lt;P&gt;In order to do this I need to go through each entry in the table and check its type to determine in which group of global variables it belongs.&lt;/P&gt;&lt;P&gt;eg: if type = bytes then it is data_unit&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if type = rand then it is rand_unit&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 26 Jun 2012 11:37:44 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/more-efficient-way-to-program/m-p/92052#M19419</guid>
      <dc:creator>Havi</dc:creator>
      <dc:date>2012-06-26T11:37:44Z</dc:date>
    </item>
    <item>
      <title>Re: more efficient way to program</title>
      <link>https://communities.sas.com/t5/SAS-Programming/more-efficient-way-to-program/m-p/92053#M19420</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;As i dont have tables,I have created using datalines or cards.Just try to execute this on sample data.&lt;/P&gt;&lt;P&gt;/* Original table that you want to read ..You can delete this in your code as you are reading for table*/&lt;/P&gt;&lt;P&gt;DATA original ;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; LENGTH Unit_Type $12 Unit_Name $10;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; INPUT Unit_Type 1-10&amp;nbsp; Unit_Name 11-23 ;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Datalines;&lt;/P&gt;&lt;P&gt;Data_Unit DATA&lt;/P&gt;&lt;P&gt;Data_Unit DATAVALUE&lt;/P&gt;&lt;P&gt;Rand_Unit ACCOUNT&lt;/P&gt;&lt;P&gt;;;;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;/* format for your original table*/&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; data fmt (keep=FMTNAME START END LABEL TYPE);&lt;/P&gt;&lt;P&gt;length FMTNAME $30. START END $256.;&lt;/P&gt;&lt;P&gt;set WORK.original;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FMTNAME = 'unit' ;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; START&amp;nbsp;&amp;nbsp; = Unit_Name;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; END&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = START;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LABEL&amp;nbsp;&amp;nbsp; = Unit_Type;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TYPE&amp;nbsp;&amp;nbsp;&amp;nbsp; = 'C' ;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;proc format cntlin=fmt lib=work; run;&lt;/P&gt;&lt;P&gt;/*Check or applying formats for the newrecords as well as for existing records*/&lt;/P&gt;&lt;P&gt; data wanttable;&lt;/P&gt;&lt;P&gt; input ID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Name $ 5-14&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Type $ 15-20;&lt;/P&gt;&lt;P&gt; unit=put(Name,unit.);&lt;/P&gt;&lt;P&gt; cards;&lt;/P&gt;&lt;P&gt;101 DATA&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Bytes&lt;/P&gt;&lt;P&gt;102 ACCOUNT&amp;nbsp;&amp;nbsp; Rand&lt;/P&gt;&lt;P&gt;103 DATAVALUE Bytes&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks,&lt;/P&gt;&lt;P&gt;Shiva&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 26 Jun 2012 13:14:49 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/more-efficient-way-to-program/m-p/92053#M19420</guid>
      <dc:creator>shivas</dc:creator>
      <dc:date>2012-06-26T13:14:49Z</dc:date>
    </item>
    <item>
      <title>Re: more efficient way to program</title>
      <link>https://communities.sas.com/t5/SAS-Programming/more-efficient-way-to-program/m-p/92054#M19421</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Creating a format to look up values in downstream processes sounds like a good idea to me. Using SAS macro variables to store these values in a list for lookup sounds only like the second best approach (unless this needs to be processed on a DB and the list is short).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;May be you show us/explain us how you actually need to look up the values later on for us to give you an adequate solution.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 26 Jun 2012 15:47:38 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/more-efficient-way-to-program/m-p/92054#M19421</guid>
      <dc:creator>Patrick</dc:creator>
      <dc:date>2012-06-26T15:47:38Z</dc:date>
    </item>
    <item>
      <title>Re: more efficient way to program</title>
      <link>https://communities.sas.com/t5/SAS-Programming/more-efficient-way-to-program/m-p/92055#M19422</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Patrick&lt;/P&gt;&lt;P&gt;Thank you for your response, please see below:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;/* template.sas*/&lt;BR /&gt; &lt;BR /&gt; ID:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Name:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Type:&lt;/P&gt;&lt;P&gt;101&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Data&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Bytes&lt;BR /&gt;102&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Account&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Rand&lt;BR /&gt;103&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DataValue&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Bytes&lt;BR /&gt;104&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Datavalue&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Bytes&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I currently use the program below and manually add in entries so the problem is that I am not aware of new entries that &lt;BR /&gt;are added in template.sas and often overlook it.&lt;/P&gt;&lt;P&gt;I want to create 2 variables data_unit and rand_unit as shown below:&lt;/P&gt;&lt;P&gt;*********************************************************************************************************&lt;BR /&gt;PROC FORMAT LIBRARY=WORK;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp; VALUE $Unit&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'DATA'&amp;nbsp;&amp;nbsp; =&amp;nbsp; '*B'&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'ACCOUNT'=&amp;nbsp; '*R'&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'DATAVALUE'='*B';&lt;BR /&gt;RUN;&lt;/P&gt;&lt;P&gt;%GLOBAL Rand_Unit Data_Unit;&lt;/P&gt;&lt;P&gt;DATA Unit;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; LENGTH Unit_Type $12 Unit_Name $10;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; INPUT Unit_Type 1-12&amp;nbsp; Unit_Name 13-23 ;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; Datalines;&lt;BR /&gt;Data_Unit DATA&lt;BR /&gt;Data_Unit DATAVALUE&lt;BR /&gt;Rand_Unit ACCOUNT&lt;BR /&gt;;;;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;PROC SQL Noprint;&lt;BR /&gt;SELECT QUOTE(TRIM(Unit_Name))INTO :Data_Unit separated BY ',' FROM Unit WHERE Unit_Type='Data_Unit';;&lt;BR /&gt;SELECT QUOTE(TRIM(Unit_Name))INTO :Rand_Unit separated BY ',' FROM Unit WHERE Unit_Type='Rand_Unit';;&lt;BR /&gt;QUIT;&lt;/P&gt;&lt;P&gt;%PUT &amp;amp;Data_Unit;&lt;BR /&gt;%PUT &amp;amp;Rand_Unit;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;I thereafter include this program in a program that needs the variables &amp;amp;Rand_unit and &amp;amp;data_unit&lt;BR /&gt;%include "/home/xxx/global_variables.sas";&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;This is an example of how I use it:&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;IF UPCASE(TRIM(unit)) in (&amp;amp;Rand_unit) THEN Prod='000';&lt;BR /&gt;ELSE IF UPCASE(TRIM(unit)) in (&amp;amp;Data_unit) THEN Prod='123';&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 27 Jun 2012 08:57:28 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/more-efficient-way-to-program/m-p/92055#M19422</guid>
      <dc:creator>Havi</dc:creator>
      <dc:date>2012-06-27T08:57:28Z</dc:date>
    </item>
    <item>
      <title>Re: more efficient way to program</title>
      <link>https://communities.sas.com/t5/SAS-Programming/more-efficient-way-to-program/m-p/92056#M19423</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Havi&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Shivas actually provided already the code demonstrating how you can create a format based on a data set. So whenever the template dataset changes you just re-create the format.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Below a code variation of what Shivas already posted to re-demonstrate the concept.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/* the changing template data set which is the source */&lt;BR /&gt;data template;&lt;BR /&gt;&amp;nbsp; infile datalines dlm=' ' truncover;&lt;BR /&gt;&amp;nbsp; input id name :$10. type :$8.;&lt;BR /&gt;datalines;&lt;BR /&gt;101 Data Bytes&lt;BR /&gt;102 Account Rand&lt;BR /&gt;103 DataValue Bytes&lt;BR /&gt;104 Datavalue Bytes&lt;BR /&gt;;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/* only use distinct key/value pairs as source for format */&lt;BR /&gt;proc sql;&lt;BR /&gt;&amp;nbsp; create view DistinctValueList as&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; select distinct strip(upcase(name)) as name, type&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; from template&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;BR /&gt;quit;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/* (re-) create format based on latest entries in template data set: prepare the source data set for the format */&lt;BR /&gt;data fmt (keep=FMTNAME START&amp;nbsp; LABEL TYPE);&lt;BR /&gt;&amp;nbsp; length FMTNAME $30. START&amp;nbsp; $256.;&lt;BR /&gt;&amp;nbsp; set DistinctValueList;&lt;BR /&gt;&amp;nbsp; FMTNAME&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 'unit' ;&lt;BR /&gt;&amp;nbsp; START&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = name;&lt;BR /&gt;&amp;nbsp; END&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = START;&lt;BR /&gt;&amp;nbsp; if type&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ='Rand' then LABEL='000';&lt;BR /&gt;&amp;nbsp; else LABEL&amp;nbsp; ='123';&lt;BR /&gt;&amp;nbsp; TYPE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 'C' ;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/* (re-) create format based on latest entries in template data set: create the format */&lt;/P&gt;&lt;P&gt;proc format cntlin=fmt lib=work; &lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;/*** and now let's test it ***/&lt;BR /&gt;data sample;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; input unit $10.;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; recoded=put(strip(upcase(unit)),$unit20.);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; Datalines;&lt;BR /&gt;DATA&lt;BR /&gt;DATAVALUE&lt;BR /&gt;ACCOUNT&lt;BR /&gt;OTHERVALUE&lt;BR /&gt;;;;&lt;BR /&gt;run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 28 Jun 2012 13:17:09 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/more-efficient-way-to-program/m-p/92056#M19423</guid>
      <dc:creator>Patrick</dc:creator>
      <dc:date>2012-06-28T13:17:09Z</dc:date>
    </item>
    <item>
      <title>Re: more efficient way to program</title>
      <link>https://communities.sas.com/t5/SAS-Programming/more-efficient-way-to-program/m-p/92057#M19424</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Courier New'; background: white; color: red; font-size: 10pt;"&gt;Thanks&lt;/SPAN&gt;&lt;SPAN style="font-family: 'Courier New'; background: white; color: black; font-size: 10pt;"&gt; Patrick, makes &lt;/SPAN&gt;&lt;SPAN style="font-family: 'Courier New'; background: white; color: teal; font-size: 10pt;"&gt;sense.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Courier New'; background: white; color: black; font-size: 10pt;"&gt;The format however will not work as I have duplicate names with different &lt;/SPAN&gt;&lt;SPAN style="font-family: 'Courier New'; background: white; color: teal; font-size: 10pt;"&gt;types.&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 28 Jun 2012 13:56:20 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/more-efficient-way-to-program/m-p/92057#M19424</guid>
      <dc:creator>Havi</dc:creator>
      <dc:date>2012-06-28T13:56:20Z</dc:date>
    </item>
    <item>
      <title>Re: more efficient way to program</title>
      <link>https://communities.sas.com/t5/SAS-Programming/more-efficient-way-to-program/m-p/92058#M19425</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Then just amend the code so that it works with your data, eg:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;/* (re-) create format based on latest entries in template data set: prepare the source data set for the format */&lt;BR /&gt;proc sql;&lt;BR /&gt;&amp;nbsp; create table fmt as&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; select distinct&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'unit' as fmtname&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , strip(upcase(name)) as start&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , strip(upcase(name)) as end&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , case(type) when 'Rand' then '000' else '123' end as label&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , 'C' as type&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; from template&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;BR /&gt;quit;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 28 Jun 2012 15:15:49 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/more-efficient-way-to-program/m-p/92058#M19425</guid>
      <dc:creator>Patrick</dc:creator>
      <dc:date>2012-06-28T15:15:49Z</dc:date>
    </item>
    <item>
      <title>Re: more efficient way to program</title>
      <link>https://communities.sas.com/t5/SAS-Programming/more-efficient-way-to-program/m-p/92059#M19426</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;hi ... another idea ... using Patrick's data set (adding an "OTHER" condition to the format) ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;proc sql;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;create view distinctvaluelist as&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;select distinct '$unit' as fmtname, upcase(name) as start, ' ' as hlo,&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; when type eq 'Rand' then '000'&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else '123'&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end as label&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;from template&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;union corr&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;select '$unit' as fmtname, ' ' as start, 'o' as hlo, '999' as label from template;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;quit;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;proc format cntlin=distinctvaluelist;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;run;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;data sample;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;input unit&amp;nbsp; :$10. @@;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;recoded = put(upcase(unit),$unit.);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;datalines;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;DATA DATAVALUE ACCOUNT OTHERVALUE&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;Obs&amp;nbsp;&amp;nbsp;&amp;nbsp; unit&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; recoded&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DATA&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 123&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DATAVALUE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 123&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt; 3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ACCOUNT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 000&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt; 4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OTHERVALUE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 999&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;if you want to stick with Patrick's PROC SQL plus a subsequent data step, maybe you would consider a couple changes (if a variable has the same value for all observations, you can use RETAIN to assign the value rather than an executable assignment that occurs at every data step iteration) ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;proc sql;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;create view DistinctValueList as&amp;nbsp; &lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;select distinct strip(upcase(name)) as start, type as new&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;from template;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;quit;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;data fmt / view=fmt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;retain fmtname '$unit';&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;do until (done);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp; set distinctvaluelist end=done;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp; label = ifc(new eq 'Rand', '000' , '123');&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp; output;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;end;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;hlo = 'o';&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;label = '999';&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;output;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;run;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;proc format cntlin=distinctvaluelist;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;run;&lt;/STRONG&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 28 Jun 2012 15:31:44 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/more-efficient-way-to-program/m-p/92059#M19426</guid>
      <dc:creator>MikeZdeb</dc:creator>
      <dc:date>2012-06-28T15:31:44Z</dc:date>
    </item>
  </channel>
</rss>

