<?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: Extract Number From String and Convert to Number in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Extract-Number-From-String-and-Convert-to-Number/m-p/980172#M378895</link>
    <description>&lt;P&gt;It is a good idea to paste your code by copy from your editor and paste into a text box opened on the forum using the &amp;lt;/&amp;gt; icon above the message window. The forum software&amp;nbsp;&lt;STRONG&gt;will&lt;/STRONG&gt; reformat text when pasted into the main message window and may hide the actual problem because of the conversion.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;From ancient behaviors with some keyboards I don't trust &amp;gt;= and =&amp;lt; and use the SAS GE and LE comparisons in code. Sometimes a &amp;gt;= or &amp;lt;= may just happen to be a single character in an extended character set that SAS won't use for comparisons.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;It is also a good idea to provide data in the form of a working data step as when I create data set such as with this data step:&lt;/P&gt;
&lt;PRE&gt;data have;
  input var1 $ var2 $;
datalines;
ROOMA 	DESK01A 	
ROOMA 	DESK01B 	
ROOMA 	DESK05B 	
ROOMA 	DESK06A 	
ROOMB 	DESK09A 	
ROOMB 	DESK09B 	
ROOMC 	DESK01B 	
ROOMC 	DESK05A 	
ROOMD 	DESK10B 	
ROOME 	DESK15A 	
ROOME 	DESK15B 	
ROOME 	DESK16 	
;&lt;/PRE&gt;
&lt;P&gt;And get this log for YOUR code:&lt;/P&gt;
&lt;PRE&gt;101    %let range_1 = 13;
102    %let range_2 = 24;
103  data test;
104     set have;
105     if input(compress(var2,'', 'A'), 8.) &amp;gt;= &amp;amp;range_1. and
105! input(compress(var2,'', 'A'), 8.) &amp;lt;= &amp;amp;range_2. then test = 'YEAH';
106  run;

NOTE: There were 12 observations read from the data set WORK.HAVE.
NOTE: The data set WORK.TEST has 12 observations and 3 variables.
NOTE: DATA statement used (Total process time):
      real time           0.00 seconds
      cpu time            0.00 seconds

&lt;/PRE&gt;
&lt;P&gt;which has no error. So one suspects something in your data may be involved.&lt;/P&gt;
&lt;P&gt;Resulting data set:&lt;/P&gt;
&lt;DIV class="branch"&gt;&lt;A name="IDX" target="_blank"&gt;&lt;/A&gt;
&lt;DIV&gt;
&lt;DIV align="left"&gt;
&lt;TABLE class="table" summary="Procedure Print: Data Set WORK.TEST" cellspacing="0" cellpadding="3"&gt;&lt;COLGROUP&gt; &lt;COL /&gt; &lt;COL /&gt; &lt;COL /&gt;&lt;/COLGROUP&gt;
&lt;THEAD&gt;
&lt;TR&gt;
&lt;TH class="c m header" scope="col"&gt;var1&lt;/TH&gt;
&lt;TH class="c m header" scope="col"&gt;var2&lt;/TH&gt;
&lt;TH class="c m header" scope="col"&gt;test&lt;/TH&gt;
&lt;/TR&gt;
&lt;/THEAD&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;ROOMA&lt;/TD&gt;
&lt;TD class="l data"&gt;DESK01A&lt;/TD&gt;
&lt;TD class="l data"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;ROOMA&lt;/TD&gt;
&lt;TD class="l data"&gt;DESK01B&lt;/TD&gt;
&lt;TD class="l data"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;ROOMA&lt;/TD&gt;
&lt;TD class="l data"&gt;DESK05B&lt;/TD&gt;
&lt;TD class="l data"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;ROOMA&lt;/TD&gt;
&lt;TD class="l data"&gt;DESK06A&lt;/TD&gt;
&lt;TD class="l data"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;ROOMB&lt;/TD&gt;
&lt;TD class="l data"&gt;DESK09A&lt;/TD&gt;
&lt;TD class="l data"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;ROOMB&lt;/TD&gt;
&lt;TD class="l data"&gt;DESK09B&lt;/TD&gt;
&lt;TD class="l data"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;ROOMC&lt;/TD&gt;
&lt;TD class="l data"&gt;DESK01B&lt;/TD&gt;
&lt;TD class="l data"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;ROOMC&lt;/TD&gt;
&lt;TD class="l data"&gt;DESK05A&lt;/TD&gt;
&lt;TD class="l data"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;ROOMD&lt;/TD&gt;
&lt;TD class="l data"&gt;DESK10B&lt;/TD&gt;
&lt;TD class="l data"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;ROOME&lt;/TD&gt;
&lt;TD class="l data"&gt;DESK15A&lt;/TD&gt;
&lt;TD class="l data"&gt;YEAH&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;ROOME&lt;/TD&gt;
&lt;TD class="l data"&gt;DESK15B&lt;/TD&gt;
&lt;TD class="l data"&gt;YEAH&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;ROOME&lt;/TD&gt;
&lt;TD class="l data"&gt;DESK16&lt;/TD&gt;
&lt;TD class="l data"&gt;YEAH&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The variables Var1 and Var2 are length 8. If your variables&amp;nbsp; white space values like leading spaces, tabs or NULL characters (ASCII 255) then we can't see those and may be reformatted by the forum software to blanks.&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I would try using :&amp;nbsp; &amp;nbsp;compress(var2,'', 'dk') to keep only digits. This would protect against non-displayed characters like Null.&lt;/P&gt;
&lt;P&gt;With those thoughts in mind, when I create a data set with this code:&lt;/P&gt;
&lt;PRE&gt;data have;
  input var1 $ var2 $;
datalines;
ROOMA 	DESK01A 	
ROOMA 	DESK01B 	
ROOMA 	DESK05B 	
ROOMA 	DESK06A 	
ROOMB 	DESK09A 	
ROOMB 	DESK09B 	
ROOMC 	DESK01B 	
ROOMC 	DESK05A 	
ROOMD 	DESK10B 	
ROOME 	DESK15A 	
ROOME 	DESK15B 	
ROOME 	DESK16 	
;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Also&amp;nbsp;&lt;STRONG&gt;any error&lt;/STRONG&gt; message should be copied from the log with the code of the procedure or data step that generates the error along with the error and all other notes or warnings for that step. Copy the text from the log, open a text box using the &amp;lt;/&amp;gt; and paste. Many of those errors will have diagnostics that indicate where the error is found.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;As an aside, I strongly recommend using numeric results in stead of 'Yes' or similar for comparisons especially if the result is binary Yes/No, True/False, Present/Not present or similar.&lt;/P&gt;
&lt;P&gt;You could use&lt;/P&gt;
&lt;P&gt;Test = value1 LE TestValue LE value;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Test would have value 1 when true and 0 when false.&amp;nbsp; It is often much easier to get reportable values from the numeric values a Sum of Test would have the count of true values, mean would be the percentage true values as as decimal. Questions like all true, all false, more true than false are also often easier to determine using sum of the variable compared to count of values, N statistic, in proc summary, means, report or tabulate than dealing with character values.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Thu, 04 Dec 2025 21:26:00 GMT</pubDate>
    <dc:creator>ballardw</dc:creator>
    <dc:date>2025-12-04T21:26:00Z</dc:date>
    <item>
      <title>Extract Number From String and Convert to Number</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Extract-Number-From-String-and-Convert-to-Number/m-p/980158#M378891</link>
      <description>&lt;P&gt;Hello.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I have a problem I'm hoping someone can help me with. I have a large list of the type at the bottom. I need to parse out the numbers from the string in var2 and then compare the result to a range. For instance, the range may be from 13 to 35 and I need to find which desks fit into that range. So if I can parse out the numbers and they determine if they are within a particular range that'd be perfect. I've attempted to use:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;data test_1;&lt;/P&gt;
&lt;P&gt;set have;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if compress(var2,'', 'A') &amp;gt;= &amp;amp;range_1. and&amp;nbsp;compress(var2,'', 'A') &amp;lt;= &amp;amp;range_2.&amp;nbsp; then test = 'YEAH';&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;to parse out the numbers and they come out alpha. I've also tried:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;data test_1;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; set have;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; if input(compress(var2,'', 'A'), 8.) &amp;gt;= &amp;amp;range_1. and input(compress(var2,'', 'A'), 8.) &amp;lt;= &amp;amp;range_2. then test = 'YEAH';&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;When I use either method above in order to convert the result to a number so I can use GE and LE to compare to the criteria range I get an error:&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;ERROR 388-185: Expecting an arithmetic operator.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;My macro variables are defined as:&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;%let range_1 = 13;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;%let range_2 = 24;&lt;/P&gt;
&lt;P&gt;so they appear to be numeric so I'm not sure where my error might be?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thanks to anyone who can take the time to help me out.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE style="border-collapse: collapse; width: 144pt;" border="0" width="192" cellspacing="0" cellpadding="0"&gt;&lt;COLGROUP&gt;&lt;COL style="width: 48pt;" span="3" width="64" /&gt; &lt;/COLGROUP&gt;
&lt;TBODY&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD width="64" height="20" class="xl63" style="height: 15.0pt; width: 48pt;"&gt;var1&lt;/TD&gt;
&lt;TD width="64" class="xl63" style="border-left: none; width: 48pt;"&gt;var2&lt;/TD&gt;
&lt;TD width="64" class="xl63" style="border-left: none; width: 48pt;"&gt;WANT&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" class="xl63" style="height: 15.0pt; border-top: none;"&gt;ROOMA&lt;/TD&gt;
&lt;TD class="xl63" style="border-top: none; border-left: none;"&gt;DESK01A&lt;/TD&gt;
&lt;TD align="right" class="xl63" style="border-top: none; border-left: none;"&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" class="xl63" style="height: 15.0pt; border-top: none;"&gt;ROOMA&lt;/TD&gt;
&lt;TD class="xl63" style="border-top: none; border-left: none;"&gt;DESK01B&lt;/TD&gt;
&lt;TD align="right" class="xl63" style="border-top: none; border-left: none;"&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" class="xl63" style="height: 15.0pt; border-top: none;"&gt;ROOMA&lt;/TD&gt;
&lt;TD class="xl63" style="border-top: none; border-left: none;"&gt;DESK05B&lt;/TD&gt;
&lt;TD align="right" class="xl63" style="border-top: none; border-left: none;"&gt;5&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" class="xl63" style="height: 15.0pt; border-top: none;"&gt;ROOMA&lt;/TD&gt;
&lt;TD class="xl63" style="border-top: none; border-left: none;"&gt;DESK06A&lt;/TD&gt;
&lt;TD align="right" class="xl63" style="border-top: none; border-left: none;"&gt;6&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" class="xl63" style="height: 15.0pt; border-top: none;"&gt;ROOMB&lt;/TD&gt;
&lt;TD class="xl63" style="border-top: none; border-left: none;"&gt;DESK09A&lt;/TD&gt;
&lt;TD align="right" class="xl63" style="border-top: none; border-left: none;"&gt;9&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" class="xl63" style="height: 15.0pt; border-top: none;"&gt;ROOMB&lt;/TD&gt;
&lt;TD class="xl63" style="border-top: none; border-left: none;"&gt;DESK09B&lt;/TD&gt;
&lt;TD align="right" class="xl63" style="border-top: none; border-left: none;"&gt;9&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" class="xl63" style="height: 15.0pt; border-top: none;"&gt;ROOMC&lt;/TD&gt;
&lt;TD class="xl63" style="border-top: none; border-left: none;"&gt;DESK01B&lt;/TD&gt;
&lt;TD align="right" class="xl63" style="border-top: none; border-left: none;"&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" class="xl63" style="height: 15.0pt; border-top: none;"&gt;ROOMC&lt;/TD&gt;
&lt;TD class="xl63" style="border-top: none; border-left: none;"&gt;DESK05A&lt;/TD&gt;
&lt;TD align="right" class="xl63" style="border-top: none; border-left: none;"&gt;5&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" class="xl63" style="height: 15.0pt; border-top: none;"&gt;ROOMD&lt;/TD&gt;
&lt;TD class="xl63" style="border-top: none; border-left: none;"&gt;DESK10B&lt;/TD&gt;
&lt;TD align="right" class="xl63" style="border-top: none; border-left: none;"&gt;10&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" class="xl63" style="height: 15.0pt; border-top: none;"&gt;ROOME&lt;/TD&gt;
&lt;TD class="xl63" style="border-top: none; border-left: none;"&gt;DESK15A&lt;/TD&gt;
&lt;TD align="right" class="xl63" style="border-top: none; border-left: none;"&gt;15&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" class="xl63" style="height: 15.0pt; border-top: none;"&gt;ROOME&lt;/TD&gt;
&lt;TD class="xl63" style="border-top: none; border-left: none;"&gt;DESK15B&lt;/TD&gt;
&lt;TD align="right" class="xl63" style="border-top: none; border-left: none;"&gt;15&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" class="xl63" style="height: 15.0pt; border-top: none;"&gt;ROOME&lt;/TD&gt;
&lt;TD class="xl63" style="border-top: none; border-left: none;"&gt;DESK16&lt;/TD&gt;
&lt;TD align="right" class="xl63" style="border-top: none; border-left: none;"&gt;16&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;</description>
      <pubDate>Thu, 04 Dec 2025 20:03:12 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Extract-Number-From-String-and-Convert-to-Number/m-p/980158#M378891</guid>
      <dc:creator>Jeff_DOC</dc:creator>
      <dc:date>2025-12-04T20:03:12Z</dc:date>
    </item>
    <item>
      <title>Re: Extract Number From String and Convert to Number</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Extract-Number-From-String-and-Convert-to-Number/m-p/980169#M378893</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data _NULL_;
 a='DESK05B';
 /* Compressing Space Characters by Using a Modifier   */
 b=compress(a, '', 's');
 /* Keeping Characters in the List by Using a Modifier */
 c=compress(b, '0123456789', 'k');
 put c=;
 d=input(c,2.);
 put d=;
 if 3 &amp;lt; d &amp;lt; 7 then test = 'YEAH';
 put test=;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Ciao,&lt;/P&gt;
&lt;P&gt;Koen&lt;/P&gt;</description>
      <pubDate>Thu, 04 Dec 2025 21:15:13 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Extract-Number-From-String-and-Convert-to-Number/m-p/980169#M378893</guid>
      <dc:creator>sbxkoenk</dc:creator>
      <dc:date>2025-12-04T21:15:13Z</dc:date>
    </item>
    <item>
      <title>Re: Extract Number From String and Convert to Number</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Extract-Number-From-String-and-Convert-to-Number/m-p/980170#M378894</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;compress(var2,'', 'A')&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The COMPRESS function produces a character string, in this case a character string of the letters in VAR2. For the first row of your data set you get the character string '01'. It is not a number, even if it looks like a number to you, so SAS does not know how to evaluate if the character string '01' is greater than&amp;nbsp;&amp;amp;range_1, which is a number. SAS cannot compare characters strings to numbers. So to fix this, you want to convert the character string from var2 into an actual number. You do this by&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;input(compress(var2,'', 'A'),3.)&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;which turns the character string into the actual number 1. Then it can be compared to the number in &amp;amp;range_1. This will handle numbers up to 3 digits wide (i.e &amp;lt;= 999).&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;My macro variables are defined as:&lt;/P&gt;
&lt;P&gt;%let range_1 = 13;&lt;BR /&gt;%let range_2 = 24;&lt;/P&gt;
&lt;P&gt;so they appear to be numeric so I'm not sure where my error might be?&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The values of macro variables are always text, no matter that they look like numbers. The only way they become numbers is if you use them in a way that SAS recognizes them as numbers. In this case, when SAS evaluates the code, it replaces &amp;amp;range_1 with 13, and so then the code actually becomes&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;compress(var2,'', 'A') &amp;gt; 13&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;and then SAS recognizes 13 as a number from the context. Do you know why in the above line that 13 is treated as a number and not a character string?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/3264"&gt;@Jeff_DOC&lt;/a&gt;&amp;nbsp;you're not new here. Please be a good citizen of the community and help us just as we are trying to help you. When you get errors in the log, then SHOW US THE LOG. We need to see the entire log for the DATA step (or PROC) that has the error from now on, without having ask.&lt;/P&gt;</description>
      <pubDate>Thu, 04 Dec 2025 21:36:41 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Extract-Number-From-String-and-Convert-to-Number/m-p/980170#M378894</guid>
      <dc:creator>PaigeMiller</dc:creator>
      <dc:date>2025-12-04T21:36:41Z</dc:date>
    </item>
    <item>
      <title>Re: Extract Number From String and Convert to Number</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Extract-Number-From-String-and-Convert-to-Number/m-p/980172#M378895</link>
      <description>&lt;P&gt;It is a good idea to paste your code by copy from your editor and paste into a text box opened on the forum using the &amp;lt;/&amp;gt; icon above the message window. The forum software&amp;nbsp;&lt;STRONG&gt;will&lt;/STRONG&gt; reformat text when pasted into the main message window and may hide the actual problem because of the conversion.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;From ancient behaviors with some keyboards I don't trust &amp;gt;= and =&amp;lt; and use the SAS GE and LE comparisons in code. Sometimes a &amp;gt;= or &amp;lt;= may just happen to be a single character in an extended character set that SAS won't use for comparisons.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;It is also a good idea to provide data in the form of a working data step as when I create data set such as with this data step:&lt;/P&gt;
&lt;PRE&gt;data have;
  input var1 $ var2 $;
datalines;
ROOMA 	DESK01A 	
ROOMA 	DESK01B 	
ROOMA 	DESK05B 	
ROOMA 	DESK06A 	
ROOMB 	DESK09A 	
ROOMB 	DESK09B 	
ROOMC 	DESK01B 	
ROOMC 	DESK05A 	
ROOMD 	DESK10B 	
ROOME 	DESK15A 	
ROOME 	DESK15B 	
ROOME 	DESK16 	
;&lt;/PRE&gt;
&lt;P&gt;And get this log for YOUR code:&lt;/P&gt;
&lt;PRE&gt;101    %let range_1 = 13;
102    %let range_2 = 24;
103  data test;
104     set have;
105     if input(compress(var2,'', 'A'), 8.) &amp;gt;= &amp;amp;range_1. and
105! input(compress(var2,'', 'A'), 8.) &amp;lt;= &amp;amp;range_2. then test = 'YEAH';
106  run;

NOTE: There were 12 observations read from the data set WORK.HAVE.
NOTE: The data set WORK.TEST has 12 observations and 3 variables.
NOTE: DATA statement used (Total process time):
      real time           0.00 seconds
      cpu time            0.00 seconds

&lt;/PRE&gt;
&lt;P&gt;which has no error. So one suspects something in your data may be involved.&lt;/P&gt;
&lt;P&gt;Resulting data set:&lt;/P&gt;
&lt;DIV class="branch"&gt;&lt;A name="IDX" target="_blank"&gt;&lt;/A&gt;
&lt;DIV&gt;
&lt;DIV align="left"&gt;
&lt;TABLE class="table" summary="Procedure Print: Data Set WORK.TEST" cellspacing="0" cellpadding="3"&gt;&lt;COLGROUP&gt; &lt;COL /&gt; &lt;COL /&gt; &lt;COL /&gt;&lt;/COLGROUP&gt;
&lt;THEAD&gt;
&lt;TR&gt;
&lt;TH class="c m header" scope="col"&gt;var1&lt;/TH&gt;
&lt;TH class="c m header" scope="col"&gt;var2&lt;/TH&gt;
&lt;TH class="c m header" scope="col"&gt;test&lt;/TH&gt;
&lt;/TR&gt;
&lt;/THEAD&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;ROOMA&lt;/TD&gt;
&lt;TD class="l data"&gt;DESK01A&lt;/TD&gt;
&lt;TD class="l data"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;ROOMA&lt;/TD&gt;
&lt;TD class="l data"&gt;DESK01B&lt;/TD&gt;
&lt;TD class="l data"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;ROOMA&lt;/TD&gt;
&lt;TD class="l data"&gt;DESK05B&lt;/TD&gt;
&lt;TD class="l data"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;ROOMA&lt;/TD&gt;
&lt;TD class="l data"&gt;DESK06A&lt;/TD&gt;
&lt;TD class="l data"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;ROOMB&lt;/TD&gt;
&lt;TD class="l data"&gt;DESK09A&lt;/TD&gt;
&lt;TD class="l data"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;ROOMB&lt;/TD&gt;
&lt;TD class="l data"&gt;DESK09B&lt;/TD&gt;
&lt;TD class="l data"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;ROOMC&lt;/TD&gt;
&lt;TD class="l data"&gt;DESK01B&lt;/TD&gt;
&lt;TD class="l data"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;ROOMC&lt;/TD&gt;
&lt;TD class="l data"&gt;DESK05A&lt;/TD&gt;
&lt;TD class="l data"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;ROOMD&lt;/TD&gt;
&lt;TD class="l data"&gt;DESK10B&lt;/TD&gt;
&lt;TD class="l data"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;ROOME&lt;/TD&gt;
&lt;TD class="l data"&gt;DESK15A&lt;/TD&gt;
&lt;TD class="l data"&gt;YEAH&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;ROOME&lt;/TD&gt;
&lt;TD class="l data"&gt;DESK15B&lt;/TD&gt;
&lt;TD class="l data"&gt;YEAH&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;ROOME&lt;/TD&gt;
&lt;TD class="l data"&gt;DESK16&lt;/TD&gt;
&lt;TD class="l data"&gt;YEAH&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The variables Var1 and Var2 are length 8. If your variables&amp;nbsp; white space values like leading spaces, tabs or NULL characters (ASCII 255) then we can't see those and may be reformatted by the forum software to blanks.&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I would try using :&amp;nbsp; &amp;nbsp;compress(var2,'', 'dk') to keep only digits. This would protect against non-displayed characters like Null.&lt;/P&gt;
&lt;P&gt;With those thoughts in mind, when I create a data set with this code:&lt;/P&gt;
&lt;PRE&gt;data have;
  input var1 $ var2 $;
datalines;
ROOMA 	DESK01A 	
ROOMA 	DESK01B 	
ROOMA 	DESK05B 	
ROOMA 	DESK06A 	
ROOMB 	DESK09A 	
ROOMB 	DESK09B 	
ROOMC 	DESK01B 	
ROOMC 	DESK05A 	
ROOMD 	DESK10B 	
ROOME 	DESK15A 	
ROOME 	DESK15B 	
ROOME 	DESK16 	
;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Also&amp;nbsp;&lt;STRONG&gt;any error&lt;/STRONG&gt; message should be copied from the log with the code of the procedure or data step that generates the error along with the error and all other notes or warnings for that step. Copy the text from the log, open a text box using the &amp;lt;/&amp;gt; and paste. Many of those errors will have diagnostics that indicate where the error is found.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;As an aside, I strongly recommend using numeric results in stead of 'Yes' or similar for comparisons especially if the result is binary Yes/No, True/False, Present/Not present or similar.&lt;/P&gt;
&lt;P&gt;You could use&lt;/P&gt;
&lt;P&gt;Test = value1 LE TestValue LE value;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Test would have value 1 when true and 0 when false.&amp;nbsp; It is often much easier to get reportable values from the numeric values a Sum of Test would have the count of true values, mean would be the percentage true values as as decimal. Questions like all true, all false, more true than false are also often easier to determine using sum of the variable compared to count of values, N statistic, in proc summary, means, report or tabulate than dealing with character values.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 04 Dec 2025 21:26:00 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Extract-Number-From-String-and-Convert-to-Number/m-p/980172#M378895</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2025-12-04T21:26:00Z</dc:date>
    </item>
    <item>
      <title>Re: Extract Number From String and Convert to Number</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Extract-Number-From-String-and-Convert-to-Number/m-p/980175#M378896</link>
      <description>&lt;P&gt;Something like below should do.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
  input var1 $ var2 $;
datalines;
ROOMA 	DESK01A 	
ROOMA 	DESK01B 	
ROOMA 	DESK05B 	
ROOMA 	DESK06A 	
ROOMB 	DESK09A 	
ROOMB 	DESK09B 	
ROOMC 	DESK01B 	
ROOMC 	DESK05A 	
ROOMD 	DESK10B 	
ROOME 	DESK15A 	
ROOME 	DESK15B 	
ROOME 	DESK16 	
ROOME 	DESK 	
;

proc format;
	value range
	.   			= 'missing'
	low - 5 	= 'Range 1'
	5 -  10 	= 'Range 2'
	10 - high	= 'Range 3'
	;
run;

data want;
	set have;
	nums=input(scan(var2,1,,'kd'),best32.);
run;

proc sql;
	select var1, var2, nums as nums1 format=best32., nums as nums2 format=range.
	from want
	;
quit;

&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Patrick_0-1764888160946.png" style="width: 358px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/111898iB25CEC025F9C8198/image-dimensions/358x306?v=v2" width="358" height="306" role="button" title="Patrick_0-1764888160946.png" alt="Patrick_0-1764888160946.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;</description>
      <pubDate>Thu, 04 Dec 2025 22:43:00 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Extract-Number-From-String-and-Convert-to-Number/m-p/980175#M378896</guid>
      <dc:creator>Patrick</dc:creator>
      <dc:date>2025-12-04T22:43:00Z</dc:date>
    </item>
    <item>
      <title>Re: Extract Number From String and Convert to Number</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Extract-Number-From-String-and-Convert-to-Number/m-p/980177#M378897</link>
      <description>&lt;P&gt;Your first program does what it asked it to do.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
  input var1 $ var2 $ WANT ;
cards;
ROOMA  DESK01A 1
ROOMA  DESK01B 1
ROOMA  DESK05B 5
ROOMA  DESK06A 6
ROOMB  DESK09A 9
ROOMB  DESK09B 9
ROOMC  DESK01B 1
ROOMC  DESK05A 5
ROOMD  DESK10B 10
ROOME  DESK15A 15
ROOME  DESK15B 15
ROOME  DESK16  16
;

%let range_1 = 13;
%let range_2 = 24;
data test_1;
  set have;
  if compress(var2,'', 'A') &amp;gt;= &amp;amp;range_1. 
  and compress(var2,'', 'A') &amp;lt;= &amp;amp;range_2.  
  then test = 'YEAH';
run;
proc print;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;Results&lt;/P&gt;
&lt;TABLE class="table" aria-label="Data Set WORK.TEST_1"&gt;
&lt;THEAD&gt;
&lt;TR&gt;
&lt;TH class="r header" scope="col"&gt;Obs&lt;/TH&gt;
&lt;TH class="header" scope="col"&gt;var1&lt;/TH&gt;
&lt;TH class="header" scope="col"&gt;var2&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;WANT&lt;/TH&gt;
&lt;TH class="header" scope="col"&gt;test&lt;/TH&gt;
&lt;/TR&gt;
&lt;/THEAD&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TH class="r rowheader" scope="row"&gt;1&lt;/TH&gt;
&lt;TD class="data"&gt;ROOMA&lt;/TD&gt;
&lt;TD class="data"&gt;DESK01A&lt;/TD&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;TD class="data"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="r rowheader" scope="row"&gt;2&lt;/TH&gt;
&lt;TD class="data"&gt;ROOMA&lt;/TD&gt;
&lt;TD class="data"&gt;DESK01B&lt;/TD&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;TD class="data"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="r rowheader" scope="row"&gt;3&lt;/TH&gt;
&lt;TD class="data"&gt;ROOMA&lt;/TD&gt;
&lt;TD class="data"&gt;DESK05B&lt;/TD&gt;
&lt;TD class="r data"&gt;5&lt;/TD&gt;
&lt;TD class="data"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="r rowheader" scope="row"&gt;4&lt;/TH&gt;
&lt;TD class="data"&gt;ROOMA&lt;/TD&gt;
&lt;TD class="data"&gt;DESK06A&lt;/TD&gt;
&lt;TD class="r data"&gt;6&lt;/TD&gt;
&lt;TD class="data"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="r rowheader" scope="row"&gt;5&lt;/TH&gt;
&lt;TD class="data"&gt;ROOMB&lt;/TD&gt;
&lt;TD class="data"&gt;DESK09A&lt;/TD&gt;
&lt;TD class="r data"&gt;9&lt;/TD&gt;
&lt;TD class="data"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="r rowheader" scope="row"&gt;6&lt;/TH&gt;
&lt;TD class="data"&gt;ROOMB&lt;/TD&gt;
&lt;TD class="data"&gt;DESK09B&lt;/TD&gt;
&lt;TD class="r data"&gt;9&lt;/TD&gt;
&lt;TD class="data"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="r rowheader" scope="row"&gt;7&lt;/TH&gt;
&lt;TD class="data"&gt;ROOMC&lt;/TD&gt;
&lt;TD class="data"&gt;DESK01B&lt;/TD&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;TD class="data"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="r rowheader" scope="row"&gt;8&lt;/TH&gt;
&lt;TD class="data"&gt;ROOMC&lt;/TD&gt;
&lt;TD class="data"&gt;DESK05A&lt;/TD&gt;
&lt;TD class="r data"&gt;5&lt;/TD&gt;
&lt;TD class="data"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="r rowheader" scope="row"&gt;9&lt;/TH&gt;
&lt;TD class="data"&gt;ROOMD&lt;/TD&gt;
&lt;TD class="data"&gt;DESK10B&lt;/TD&gt;
&lt;TD class="r data"&gt;10&lt;/TD&gt;
&lt;TD class="data"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="r rowheader" scope="row"&gt;10&lt;/TH&gt;
&lt;TD class="data"&gt;ROOME&lt;/TD&gt;
&lt;TD class="data"&gt;DESK15A&lt;/TD&gt;
&lt;TD class="r data"&gt;15&lt;/TD&gt;
&lt;TD class="data"&gt;YEAH&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="r rowheader" scope="row"&gt;11&lt;/TH&gt;
&lt;TD class="data"&gt;ROOME&lt;/TD&gt;
&lt;TD class="data"&gt;DESK15B&lt;/TD&gt;
&lt;TD class="r data"&gt;15&lt;/TD&gt;
&lt;TD class="data"&gt;YEAH&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="r rowheader" scope="row"&gt;12&lt;/TH&gt;
&lt;TD class="data"&gt;ROOME&lt;/TD&gt;
&lt;TD class="data"&gt;DESK16&lt;/TD&gt;
&lt;TD class="r data"&gt;16&lt;/TD&gt;
&lt;TD class="data"&gt;YEAH&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;But why does it work?&amp;nbsp; Because SAS helpfully automatically converted the strings like '1' and '15' that your COMPRESS() function call generated into numbers:&lt;/P&gt;
&lt;PRE&gt; 90         data test_1;
 91           set have;
 92           if compress(var2,'', 'A') &amp;gt;= &amp;amp;range_1.
 93           and compress(var2,'', 'A') &amp;lt;= &amp;amp;range_2.
 94           then test = 'YEAH';
 95         run;
 
 NOTE: Character values have been converted to numeric values at the places given by: (Line):(Column).
       92:6   93:7   &lt;/PRE&gt;
&lt;P&gt;If you want to convert the value to numbers yourself then use the INPUT() function.&lt;/P&gt;
&lt;PRE&gt;data test_2;
  set have;
  test2 = input(compress(var2,' ','A'),32.);
  check= (test2 = want);
run;&lt;/PRE&gt;
&lt;P&gt;Result&lt;/P&gt;
&lt;TABLE class="table" aria-label="Data Set WORK.TEST_2"&gt;
&lt;THEAD&gt;
&lt;TR&gt;
&lt;TH class="r header" scope="col"&gt;Obs&lt;/TH&gt;
&lt;TH class="header" scope="col"&gt;var1&lt;/TH&gt;
&lt;TH class="header" scope="col"&gt;var2&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;WANT&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;test2&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;check&lt;/TH&gt;
&lt;/TR&gt;
&lt;/THEAD&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TH class="r rowheader" scope="row"&gt;1&lt;/TH&gt;
&lt;TD class="data"&gt;ROOMA&lt;/TD&gt;
&lt;TD class="data"&gt;DESK01A&lt;/TD&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="r rowheader" scope="row"&gt;2&lt;/TH&gt;
&lt;TD class="data"&gt;ROOMA&lt;/TD&gt;
&lt;TD class="data"&gt;DESK01B&lt;/TD&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="r rowheader" scope="row"&gt;3&lt;/TH&gt;
&lt;TD class="data"&gt;ROOMA&lt;/TD&gt;
&lt;TD class="data"&gt;DESK05B&lt;/TD&gt;
&lt;TD class="r data"&gt;5&lt;/TD&gt;
&lt;TD class="r data"&gt;5&lt;/TD&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="r rowheader" scope="row"&gt;4&lt;/TH&gt;
&lt;TD class="data"&gt;ROOMA&lt;/TD&gt;
&lt;TD class="data"&gt;DESK06A&lt;/TD&gt;
&lt;TD class="r data"&gt;6&lt;/TD&gt;
&lt;TD class="r data"&gt;6&lt;/TD&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="r rowheader" scope="row"&gt;5&lt;/TH&gt;
&lt;TD class="data"&gt;ROOMB&lt;/TD&gt;
&lt;TD class="data"&gt;DESK09A&lt;/TD&gt;
&lt;TD class="r data"&gt;9&lt;/TD&gt;
&lt;TD class="r data"&gt;9&lt;/TD&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="r rowheader" scope="row"&gt;6&lt;/TH&gt;
&lt;TD class="data"&gt;ROOMB&lt;/TD&gt;
&lt;TD class="data"&gt;DESK09B&lt;/TD&gt;
&lt;TD class="r data"&gt;9&lt;/TD&gt;
&lt;TD class="r data"&gt;9&lt;/TD&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="r rowheader" scope="row"&gt;7&lt;/TH&gt;
&lt;TD class="data"&gt;ROOMC&lt;/TD&gt;
&lt;TD class="data"&gt;DESK01B&lt;/TD&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="r rowheader" scope="row"&gt;8&lt;/TH&gt;
&lt;TD class="data"&gt;ROOMC&lt;/TD&gt;
&lt;TD class="data"&gt;DESK05A&lt;/TD&gt;
&lt;TD class="r data"&gt;5&lt;/TD&gt;
&lt;TD class="r data"&gt;5&lt;/TD&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="r rowheader" scope="row"&gt;9&lt;/TH&gt;
&lt;TD class="data"&gt;ROOMD&lt;/TD&gt;
&lt;TD class="data"&gt;DESK10B&lt;/TD&gt;
&lt;TD class="r data"&gt;10&lt;/TD&gt;
&lt;TD class="r data"&gt;10&lt;/TD&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="r rowheader" scope="row"&gt;10&lt;/TH&gt;
&lt;TD class="data"&gt;ROOME&lt;/TD&gt;
&lt;TD class="data"&gt;DESK15A&lt;/TD&gt;
&lt;TD class="r data"&gt;15&lt;/TD&gt;
&lt;TD class="r data"&gt;15&lt;/TD&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="r rowheader" scope="row"&gt;11&lt;/TH&gt;
&lt;TD class="data"&gt;ROOME&lt;/TD&gt;
&lt;TD class="data"&gt;DESK15B&lt;/TD&gt;
&lt;TD class="r data"&gt;15&lt;/TD&gt;
&lt;TD class="r data"&gt;15&lt;/TD&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="r rowheader" scope="row"&gt;12&lt;/TH&gt;
&lt;TD class="data"&gt;ROOME&lt;/TD&gt;
&lt;TD class="data"&gt;DESK16&lt;/TD&gt;
&lt;TD class="r data"&gt;16&lt;/TD&gt;
&lt;TD class="r data"&gt;16&lt;/TD&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Two things to note.&lt;/P&gt;
&lt;P&gt;1) I explicitly asked COMPRESS() to remove spaces as well has letters.&amp;nbsp; You might also instead try tell it to only keep digits.&lt;/P&gt;
&lt;P&gt;2) I used the 32. informat to read the generated string.&amp;nbsp; The INPUT() function does not care if the width of the informat being used is larger than the length of the string being read.&amp;nbsp; And since 32 is the maximum width that the numeric informat supports it is best to use that when you don't know how long the string being read might be.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 05 Dec 2025 01:48:31 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Extract-Number-From-String-and-Convert-to-Number/m-p/980177#M378897</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2025-12-05T01:48:31Z</dc:date>
    </item>
    <item>
      <title>Re: Extract Number From String and Convert to Number</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Extract-Number-From-String-and-Convert-to-Number/m-p/980212#M378910</link>
      <description>&lt;P&gt;So many good solutions but I accepted the one I found to be easiest to understand and took the least effort. I learned a lot along the way, thank you to all who contributed their time and expertise.&lt;/P&gt;</description>
      <pubDate>Fri, 05 Dec 2025 17:09:53 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Extract-Number-From-String-and-Convert-to-Number/m-p/980212#M378910</guid>
      <dc:creator>Jeff_DOC</dc:creator>
      <dc:date>2025-12-05T17:09:53Z</dc:date>
    </item>
  </channel>
</rss>

