<?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: Reading human entered data - eg - 'ten' as '10' in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Reading-human-entered-data-eg-ten-as-10/m-p/117677#M24285</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;/*Create a dataset to be used to create informat*/&lt;BR /&gt;data informat_data;&lt;BR /&gt;format start $100.;&lt;BR /&gt;fmtname ='w_to_n';&lt;BR /&gt;type='I';&lt;BR /&gt;do label=1 to 100;&lt;BR /&gt;start=tranwrd(put(label,words100.),'-',' '); /*Replacing - with space*/&lt;BR /&gt;output;&lt;BR /&gt;end;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/*Create an informat*/&lt;/P&gt;&lt;P&gt;proc format cntlin=informat_data;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/*Apply informat to read words as numbers*/&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data test ;&lt;BR /&gt;input comments $50.;&lt;BR /&gt;number=input(compbl(lowcase(comments)),w_to_n.);&lt;BR /&gt;datalines;&lt;BR /&gt;10&lt;BR /&gt;twenTY FouR&lt;BR /&gt;Thirty&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nine&lt;BR /&gt;one&lt;BR /&gt;SIX&lt;BR /&gt;;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 25 Jun 2013 12:10:13 GMT</pubDate>
    <dc:creator>pali</dc:creator>
    <dc:date>2013-06-25T12:10:13Z</dc:date>
    <item>
      <title>Reading human entered data - eg - 'ten' as '10'</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Reading-human-entered-data-eg-ten-as-10/m-p/117674#M24282</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;BR /&gt;I have some scanned in paper form data and something that would save me a lot of time would be&amp;nbsp; a way to quickly convert numbers entered as words to numbers as numbers. The WORDSnn. format converts numbers to words - eg 10 to ten but I want the equivalent the other way round in either a Function or a informat. I have other complications in that people can write any old text from a regular '10' to&amp;nbsp; "ten" to "ten years too long" to "I can't remember".&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 25 Jun 2013 00:31:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Reading-human-entered-data-eg-ten-as-10/m-p/117674#M24282</guid>
      <dc:creator>IanatAIHW</dc:creator>
      <dc:date>2013-06-25T00:31:35Z</dc:date>
    </item>
    <item>
      <title>Re: Reading human entered data - eg - 'ten' as '10'</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Reading-human-entered-data-eg-ten-as-10/m-p/117675#M24283</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Maybe try something like this:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;&lt;BR /&gt;data have; &lt;BR /&gt;input str $20.; &lt;BR /&gt;datalines;&lt;BR /&gt;ten&lt;BR /&gt;twenty&lt;BR /&gt;thirteen&lt;BR /&gt;Forty&lt;BR /&gt;SIX&lt;BR /&gt;FoUr&lt;BR /&gt;run;&lt;BR /&gt;data want(drop=rc num_str);&lt;BR /&gt;if _N_ = 1 then do;&lt;BR /&gt;&amp;nbsp; declare hash h();&lt;BR /&gt;&amp;nbsp; h.definekey('num_str'); &lt;BR /&gt;&amp;nbsp; h.definedata('num_str','num_int'); &lt;BR /&gt;&amp;nbsp; h.definedone(); &lt;BR /&gt;&amp;nbsp; do num_int = 1 to 1000; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; num_str=put(num_int,words50.); &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; h.add(); &lt;BR /&gt;&amp;nbsp; end;&lt;BR /&gt;end;&lt;BR /&gt;set have;&lt;BR /&gt;num_str=lowcase(str); &lt;BR /&gt;rc=h.find();&lt;BR /&gt;run;&lt;BR /&gt; &lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 25 Jun 2013 07:53:33 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Reading-human-entered-data-eg-ten-as-10/m-p/117675#M24283</guid>
      <dc:creator>Vladislaff</dc:creator>
      <dc:date>2013-06-25T07:53:33Z</dc:date>
    </item>
    <item>
      <title>Re: Reading human entered data - eg - 'ten' as '10'</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Reading-human-entered-data-eg-ten-as-10/m-p/117676#M24284</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;This works:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;data NUMBERS;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * create translation table;
&amp;nbsp; do N=1 to 1000;
&amp;nbsp;&amp;nbsp;&amp;nbsp; C=put(N,words32.);
&amp;nbsp;&amp;nbsp;&amp;nbsp; output;
&amp;nbsp; end;
run;
data RANDOMTEXT;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * create sample data, add junk text ;
&amp;nbsp; set NUMBERS(keep=C);
&amp;nbsp; C=catx(' ',C,'years ago');
&amp;nbsp; if ranuni(0) lt .1;
run;
data TEXT2DIGITS;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * replace data in sample and substitute letters for numbers;
&amp;nbsp; retain DSID;
&amp;nbsp; if _N_=1&amp;nbsp;&amp;nbsp; then DSID= open ('NUMBERS','i');
&amp;nbsp; if LASTOBS then RC&amp;nbsp; = close(DSID);
&amp;nbsp; set RANDOMTEXT end=LASTOBS;
&amp;nbsp; * start from largest number so we dont match the one in thirty-one before matching thirty-one;
&amp;nbsp; do OBS=1000 to 1 by -1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; RC=fetchobs(DSID,OBS);
&amp;nbsp;&amp;nbsp;&amp;nbsp; NUM=getvarc(DSID,2);
&amp;nbsp;&amp;nbsp;&amp;nbsp; if find(C,NUM,'it') then do;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; C=tranwrd(C,trim(NUM),put(getvarn(DSID,1),4.));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;
&amp;nbsp;&amp;nbsp;&amp;nbsp; end;
&amp;nbsp; end;
&amp;nbsp; output;&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; * no match&amp;nbsp; ;
run;

&amp;nbsp;&amp;nbsp;&amp;nbsp; 

&amp;nbsp; 


&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 25 Jun 2013 11:06:38 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Reading-human-entered-data-eg-ten-as-10/m-p/117676#M24284</guid>
      <dc:creator>ChrisNZ</dc:creator>
      <dc:date>2013-06-25T11:06:38Z</dc:date>
    </item>
    <item>
      <title>Re: Reading human entered data - eg - 'ten' as '10'</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Reading-human-entered-data-eg-ten-as-10/m-p/117677#M24285</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;/*Create a dataset to be used to create informat*/&lt;BR /&gt;data informat_data;&lt;BR /&gt;format start $100.;&lt;BR /&gt;fmtname ='w_to_n';&lt;BR /&gt;type='I';&lt;BR /&gt;do label=1 to 100;&lt;BR /&gt;start=tranwrd(put(label,words100.),'-',' '); /*Replacing - with space*/&lt;BR /&gt;output;&lt;BR /&gt;end;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/*Create an informat*/&lt;/P&gt;&lt;P&gt;proc format cntlin=informat_data;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/*Apply informat to read words as numbers*/&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data test ;&lt;BR /&gt;input comments $50.;&lt;BR /&gt;number=input(compbl(lowcase(comments)),w_to_n.);&lt;BR /&gt;datalines;&lt;BR /&gt;10&lt;BR /&gt;twenTY FouR&lt;BR /&gt;Thirty&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nine&lt;BR /&gt;one&lt;BR /&gt;SIX&lt;BR /&gt;;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 25 Jun 2013 12:10:13 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Reading-human-entered-data-eg-ten-as-10/m-p/117677#M24285</guid>
      <dc:creator>pali</dc:creator>
      <dc:date>2013-06-25T12:10:13Z</dc:date>
    </item>
    <item>
      <title>Re: Reading human entered data - eg - 'ten' as '10'</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Reading-human-entered-data-eg-ten-as-10/m-p/117678#M24286</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Your solution doesn't deal with junk text, but I like how you thought about issues caused by hyphens.&lt;/P&gt;&lt;P&gt;I've added that flexibility to my solution.&lt;/P&gt;&lt;P&gt;Also, the word format omits 'and' in strings Iike 'one hundred and one' which sas writes 'one hundred one'&lt;/P&gt;&lt;P&gt;I've now catered for this as well.&lt;/P&gt;&lt;P&gt;Lastly, translate() is better suited than tranwrd() for replacing characters.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;data NUMBERS;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * create translation table;
&amp;nbsp; do N=1 to 1000;
&amp;nbsp;&amp;nbsp;&amp;nbsp; C=translate(put(N,words32.),' ','-');
&amp;nbsp;&amp;nbsp;&amp;nbsp; output;
&amp;nbsp; end;
run;
data RANDOMTEXT;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * create sample data, add junk text ;
&amp;nbsp; set NUMBERS(keep=C);
&amp;nbsp; C=catx(' ',C,' years ago');
&amp;nbsp; if ranuni(0) lt .1;
run;
data TEXT2DIGITS(keep= C C1);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * replace data in sample and substitute letters for numbers;
&amp;nbsp; retain DSID;
&amp;nbsp; if _N_=1&amp;nbsp;&amp;nbsp; then DSID= open ('NUMBERS','i');
&amp;nbsp; if LASTOBS then RC&amp;nbsp; = close(DSID);
&amp;nbsp; set RANDOMTEXT end=LASTOBS;
&amp;nbsp; C1 =compbl(tranwrd(translate(C,' ','-'),'and',' '));
&amp;nbsp; * start from largest number so we dont match the one in thirty-one before matching thirty-one;
&amp;nbsp; do OBS=1000 to 1 by -1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; RC =fetchobs(DSID,OBS);
&amp;nbsp;&amp;nbsp;&amp;nbsp; NUM=getvarc(DSID,2);
&amp;nbsp;&amp;nbsp;&amp;nbsp; if find(C1,NUM,'it') then do;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; C1=tranwrd(C1,trim(NUM),put(getvarn(DSID,1),4.));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;
&amp;nbsp;&amp;nbsp;&amp;nbsp; end;
&amp;nbsp; end;
&amp;nbsp; output;&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;&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; * no match&amp;nbsp; ;
run;
&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 25 Jun 2013 20:55:24 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Reading-human-entered-data-eg-ten-as-10/m-p/117678#M24286</guid>
      <dc:creator>ChrisNZ</dc:creator>
      <dc:date>2013-06-25T20:55:24Z</dc:date>
    </item>
  </channel>
</rss>

