<?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: split the variable based on single quotation marks in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/split-the-variable-based-on-single-quotation-marks/m-p/552734#M153679</link>
    <description>&lt;P&gt;Dear&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/88384"&gt;@Shmuel&lt;/a&gt;&amp;nbsp;,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I get the current result(and NOTE) by using the previous code. I expect to update the previous code, thereby fixing the errors.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I do not How to use the&amp;nbsp;&lt;SPAN&gt;%superq macro function, Could you please give me more suggestions about this?&lt;/SPAN&gt;&lt;/P&gt;</description>
    <pubDate>Sun, 21 Apr 2019 22:04:50 GMT</pubDate>
    <dc:creator>Alexxxxxxx</dc:creator>
    <dc:date>2019-04-21T22:04:50Z</dc:date>
    <item>
      <title>split the variable based on single quotation marks</title>
      <link>https://communities.sas.com/t5/SAS-Programming/split-the-variable-based-on-single-quotation-marks/m-p/552710#M153662</link>
      <description>&lt;P&gt;Dear all,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I am trying to split the variable based on&amp;nbsp; (),[],{},' '," " , and then separate strings among them into&amp;nbsp;&lt;CODE class=" language-sas"&gt;&amp;amp;COMPANY_NAME._inB, strings outside the them into&amp;nbsp;&amp;amp;COMPANY_NAME._noB.&lt;/CODE&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%MACRO CompnayNameM(no=,Company_name=);
	data step9.Patstat_total_hrm_Step3;
		set step9.Patstat_total_hrm_Step3;
		RegExID = prxparse('/&amp;lt;.*&amp;gt;|\[.*\]|\(.*\)|\{.*\}|".*"|''.*''/');
		start=1;
		stop=length(&amp;amp;COMPANY_NAME._Step23);
		call prxnext(RegExID, start, stop, &amp;amp;COMPANY_NAME._Step23, pos, length);
		do while (pos &amp;gt; 0);
			&amp;amp;COMPANY_NAME._inB = substr(&amp;amp;COMPANY_NAME._Step23, pos+1, length-2);
			&amp;amp;COMPANY_NAME._noB = prxchange('s/&amp;lt;.*&amp;gt;|\[.*\]|\(.*\)|\{.*\}|".*"|''.*''/ /', -1, &amp;amp;COMPANY_NAME._Step23);
			call prxnext(RegExID, start, stop, &amp;amp;COMPANY_NAME._Step23, pos, length);
		end;
		drop RegExID pos length start stop;
	run;

	proc sql;
		create table PATSTAT3&amp;amp;no. as
		select distinct
		&amp;amp;COMPANY_NAME.,
		&amp;amp;COMPANY_NAME._Step23,
		&amp;amp;COMPANY_NAME._inB,
		&amp;amp;COMPANY_NAME._noB
		from step9.Patstat_total_hrm_Step3
		where &amp;amp;COMPANY_NAME._inB ne ''
		;
	quit;

%MEND CompnayNameM;
%CompnayNameM(no=1,Company_name=HRM_L2)
%CompnayNameM(no=2,Company_name=PERSON_NAME)
%CompnayNameM(no=3,Company_name=HRM_L2_B)
%CompnayNameM(no=4,Company_name=PERSON_NAME_B)
run;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;However, I get the result as&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;NOTE: Invalid third argument to function SUBSTR at line 2 column 106.&lt;BR /&gt;HRM_L2=''AKTAL-LTD PERSON_CTRY_CODE=KZ PERSON_NAME=''AKTAL-LTD' SECTOR=COMPANY PERSON_ADDRESS=&lt;BR /&gt;HRM_L2_Step23=''AKTAL-LTD PERSON_NAME_Step23=''AKTAL-LTD' HRM_L2_B= HRM_L2_address=&lt;BR /&gt;chflagHRM_L2_Bv23=0 PERSON_NAME_B= PERSON_NAME_address= chflagPERSON_NAME_Bv23=0 HRM_L2_B_Step23=&lt;BR /&gt;PERSON_NAME_B_Step23= RegExID=1 start=3 stop=11 pos=0 length=0 HRM_L2_inB='AKTAL-LTD&lt;BR /&gt;HRM_L2_noB=AKTAL-LTD _ERROR_=1 _N_=2035185&lt;BR /&gt;NOTE: Invalid third argument to function SUBSTR at line 2 column 106.&lt;BR /&gt;HRM_L2=CIRCULAR PLANE SAW'' PERSON_CTRY_CODE=RU PERSON_NAME=OOO 'CIRCULAR PLANE SAW'' SECTOR=COMPANY&lt;BR /&gt;PERSON_ADDRESS= HRM_L2_Step23=CIRCULAR PLANE SAW'' PERSON_NAME_Step23=OOO 'CIRCULAR PLANE SAW''&lt;BR /&gt;HRM_L2_B= HRM_L2_address= chflagHRM_L2_Bv23=0 PERSON_NAME_B= PERSON_NAME_address=&lt;BR /&gt;chflagPERSON_NAME_Bv23=0 HRM_L2_B_Step23= PERSON_NAME_B_Step23= RegExID=1 start=21 stop=20 pos=0&lt;BR /&gt;length=0 HRM_L2_inB=' HRM_L2_noB=CIRCULAR PLANE SAW _ERROR_=1 _N_=2115372&lt;BR /&gt;NOTE: Invalid third argument to function SUBSTR at line 2 column 106.&lt;BR /&gt;HRM_L2=JS. CO. ORMETO-YUMZ'' PERSON_CTRY_CODE=RU PERSON_NAME=JS. CO. 'ORMETO-YUMZ'' SECTOR=COMPANY&lt;BR /&gt;PERSON_ADDRESS= HRM_L2_Step23=JS. CO. ORMETO-YUMZ'' PERSON_NAME_Step23=JS. CO. 'ORMETO-YUMZ''&lt;BR /&gt;HRM_L2_B= HRM_L2_address= chflagHRM_L2_Bv23=0 PERSON_NAME_B= PERSON_NAME_address=&lt;BR /&gt;chflagPERSON_NAME_Bv23=0 HRM_L2_B_Step23= PERSON_NAME_B_Step23= RegExID=1 start=22 stop=21 pos=0&lt;BR /&gt;length=0 HRM_L2_inB=' HRM_L2_noB=JS. CO. ORMETO-YUMZ _ERROR_=1 _N_=2120410&lt;BR /&gt;NOTE: Invalid third argument to function SUBSTR at line 2 column 106.&lt;BR /&gt;HRM_L2=OBSCHESTVO S OGRANICHENNOJ OTVETSTVENNOSTYU ''KVARTS PERSON_CTRY_CODE=RU&lt;BR /&gt;PERSON_NAME=OBSCHESTVO S OGRANICHENNOJ OTVETSTVENNOSTYU ''KVARTS SECTOR=COMPANY PERSON_ADDRESS=&lt;BR /&gt;HRM_L2_Step23=OBSCHESTVO S OGRANICHENNOJ OTVETSTVENNOSTYU ''KVARTS&lt;BR /&gt;PERSON_NAME_Step23=OBSCHESTVO S OGRANICHENNOJ OTVETSTVENNOSTYU ''KVARTS HRM_L2_B= HRM_L2_address=&lt;BR /&gt;chflagHRM_L2_Bv23=0 PERSON_NAME_B= PERSON_NAME_address= chflagPERSON_NAME_Bv23=0 HRM_L2_B_Step23=&lt;BR /&gt;PERSON_NAME_B_Step23= RegExID=1 start=47 stop=52 pos=0 length=0 HRM_L2_inB='KVARTS&lt;BR /&gt;HRM_L2_noB=OBSCHESTVO S OGRANICHENNOJ OTVETSTVENNOSTYU KVARTS _ERROR_=1 _N_=2131108&lt;BR /&gt;NOTE: Invalid third argument to function SUBSTR at line 2 column 106.&lt;BR /&gt;HRM_L2=AZOVZAGAL''MASH JOINT STOCK COMPANY PERSON_CTRY_CODE=UA&lt;BR /&gt;PERSON_NAME='AZOVZAGAL''MASH' JOINT STOCK COMPANY SECTOR=COMPANY PERSON_ADDRESS=&lt;BR /&gt;HRM_L2_Step23=AZOVZAGAL''MASH JOINT STOCK COMPANY&lt;BR /&gt;PERSON_NAME_Step23='AZOVZAGAL''MASH' JOINT STOCK COMPANY HRM_L2_B= HRM_L2_address=&lt;BR /&gt;chflagHRM_L2_Bv23=0 PERSON_NAME_B= PERSON_NAME_address= chflagPERSON_NAME_Bv23=0 HRM_L2_B_Step23=&lt;BR /&gt;PERSON_NAME_B_Step23= RegExID=1 start=12 stop=35 pos=0 length=0 HRM_L2_inB='MASH JOINT STOCK COMPANY&lt;BR /&gt;HRM_L2_noB=AZOVZAGAL MASH JOINT STOCK COMPANY _ERROR_=1 _N_=2245500&lt;BR /&gt;NOTE: Invalid third argument to function SUBSTR at line 2 column 106.&lt;BR /&gt;HRM_L2=CHERKAS''KE HIMVOLOKNO JOINT STOCK COMPANY PERSON_CTRY_CODE=UA&lt;BR /&gt;PERSON_NAME='CHERKAS''KE HIMVOLOKNO' JOINT STOCK COMPANY SECTOR=COMPANY PERSON_ADDRESS=&lt;BR /&gt;HRM_L2_Step23=CHERKAS''KE HIMVOLOKNO JOINT STOCK COMPANY&lt;BR /&gt;PERSON_NAME_Step23='CHERKAS''KE HIMVOLOKNO' JOINT STOCK COMPANY HRM_L2_B= HRM_L2_address=&lt;BR /&gt;chflagHRM_L2_Bv23=0 PERSON_NAME_B= PERSON_NAME_address= chflagPERSON_NAME_Bv23=0 HRM_L2_B_Step23=&lt;BR /&gt;PERSON_NAME_B_Step23= RegExID=1 start=10 stop=42 pos=0 length=0&lt;BR /&gt;HRM_L2_inB='KE HIMVOLOKNO JOINT STOCK COMPANY HRM_L2_noB=CHERKAS KE HIMVOLOKNO JOINT STOCK COMPANY&lt;BR /&gt;_ERROR_=1 _N_=2245623&lt;BR /&gt;
&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;According to this result, I conclude the problematic variable as&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;'CIRCULAR PLANE SAW''
''AKTAL-LTD'
DR. REDDY''S LABORATORIES LTD.
ZAKRYTOE AKTSIONERNOE OBSCHESTVO ''SKY LTD.''
''TETRA LTD.' FIRM', LIMITED-LIABILITY COMPANY&lt;BR /&gt;''TETRA LTD.' ' FIRM', LIMITED-LIABILITY COMPANY&lt;BR /&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;I expect to put all strings and characters which included in the outermost single quotation marks into&amp;nbsp;&amp;nbsp;&lt;CODE class=" language-sas"&gt;&amp;amp;COMPANY_NAME._inB, &lt;/CODE&gt;&lt;CODE class=" language-sas"&gt;and the rest into&amp;nbsp;&amp;amp;COMPANY_NAME._noB&lt;/CODE&gt;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Name&lt;/TD&gt;&lt;TD&gt;&amp;amp;COMPANY_NAME._inB&lt;/TD&gt;&lt;TD&gt;&amp;amp;COMPANY_NAME._noB&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;CIRCULAR PLANE SAW''&lt;/TD&gt;&lt;TD&gt;CIRCULAR PLANE SAW'&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;'AKTAL-LTD'&lt;/TD&gt;&lt;TD&gt;AKTAL-LTD&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;DR. REDDY''S LABORATORIES LTD.&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;DR. REDDY S LABORATORIES LTD.&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;ZAKRYTOE AKTSIONERNOE OBSCHESTVO ''SKY LTD.''&lt;/TD&gt;&lt;TD&gt;SKY LTD.'&lt;/TD&gt;&lt;TD&gt;ZAKRYTOE AKTSIONERNOE OBSCHESTVO&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;'TETRA LTD.' FIRM', LIMITED-LIABILITY COMPANY&lt;/TD&gt;&lt;TD&gt;TETRA LTD.' FIRM&lt;/TD&gt;&lt;TD&gt;, LIMITED-LIABILITY COMPANY&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;'TETRA LTD.' ' FIRM', LIMITED-LIABILITY COMPANY&lt;/TD&gt;&lt;TD&gt;TETRA LTD.' FIRM&lt;/TD&gt;&lt;TD&gt;, LIMITED-LIABILITY COMPANY&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;I have tried to use the online regex tester to fix it but does not work. Could you please give me some suggestions about this?&lt;/P&gt;&lt;P&gt;thanks in advance.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sun, 21 Apr 2019 18:45:21 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/split-the-variable-based-on-single-quotation-marks/m-p/552710#M153662</guid>
      <dc:creator>Alexxxxxxx</dc:creator>
      <dc:date>2019-04-21T18:45:21Z</dc:date>
    </item>
    <item>
      <title>Re: split the variable based on single quotation marks</title>
      <link>https://communities.sas.com/t5/SAS-Programming/split-the-variable-based-on-single-quotation-marks/m-p/552730#M153677</link>
      <description>&lt;P&gt;What is the difference between this post and your&amp;nbsp;&lt;A href="https://communities.sas.com/t5/SAS-Programming/split-several-company-name-variable-in-new-variables-based-on/td-p/547437" target="_self"&gt;previous one ?&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Have you tried %superq macro function ?&lt;/P&gt;</description>
      <pubDate>Sun, 21 Apr 2019 20:05:11 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/split-the-variable-based-on-single-quotation-marks/m-p/552730#M153677</guid>
      <dc:creator>Shmuel</dc:creator>
      <dc:date>2019-04-21T20:05:11Z</dc:date>
    </item>
    <item>
      <title>Re: split the variable based on single quotation marks</title>
      <link>https://communities.sas.com/t5/SAS-Programming/split-the-variable-based-on-single-quotation-marks/m-p/552734#M153679</link>
      <description>&lt;P&gt;Dear&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/88384"&gt;@Shmuel&lt;/a&gt;&amp;nbsp;,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I get the current result(and NOTE) by using the previous code. I expect to update the previous code, thereby fixing the errors.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I do not How to use the&amp;nbsp;&lt;SPAN&gt;%superq macro function, Could you please give me more suggestions about this?&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Sun, 21 Apr 2019 22:04:50 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/split-the-variable-based-on-single-quotation-marks/m-p/552734#M153679</guid>
      <dc:creator>Alexxxxxxx</dc:creator>
      <dc:date>2019-04-21T22:04:50Z</dc:date>
    </item>
    <item>
      <title>Re: split the variable based on single quotation marks</title>
      <link>https://communities.sas.com/t5/SAS-Programming/split-the-variable-based-on-single-quotation-marks/m-p/552760#M153690</link>
      <description>&lt;P&gt;Few remarks:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;1) In your code you are overriding your input by the output.&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; Better way is to assign a different name, in order not to force restart from beginning.&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data    step9.Patstat_total_hrm_Step3;
  set   step9.Patstat_total_hrm_Step3;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;2) It is difficult to consult without test data.&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; I assumed it is the same as in your previous post.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;3) Debug your code out of a macro program, by:&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%let company_name = &amp;lt;any name to test&amp;gt; ;
data check;
 set step9.Patstat_total_hrm_Step3;
     RegExID = prxparse('/&amp;lt;.*&amp;gt;|\[.*\]|\(.*\)|\{.*\}|".*"|''.*''/');
     start=1;
     stop=length(&amp;amp;COMPANY_NAME._Step23);
     call prxnext(RegExID, start, stop, &amp;amp;COMPANY_NAME._Step23, pos, length);
     do while (pos &amp;gt; 0);
       &amp;amp;COMPANY_NAME._inB = substr(&amp;amp;COMPANY_NAME._Step23, pos+1, length-2);
       &amp;amp;COMPANY_NAME._noB = prxchange('s/&amp;lt;.*&amp;gt;|\[.*\]|\(.*\)|\{.*\}|".*"|''.*''/ /', -1, &amp;amp;COMPANY_NAME._Step23);
       call prxnext(RegExID, start, stop, &amp;amp;COMPANY_NAME._Step23, pos, length);
    end;
drop RegExID pos length start stop;
run;

proc sql;
     create table PATSTAT3&amp;amp;no. as
     select distinct
         &amp;amp;COMPANY_NAME.,
         &amp;amp;COMPANY_NAME._Step23,
         &amp;amp;COMPANY_NAME._inB,
         &amp;amp;COMPANY_NAME._noB
     from check                     /* step9.Patstat_total_hrm_Step3 */
     where &amp;amp;COMPANY_NAME._inB ne ''
  ;
quit;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp;4) You got notes/errors, in different observations,&amp;nbsp; like:&lt;/P&gt;
&lt;PRE&gt;NOTE: Invalid third argument to function SUBSTR at line 2 column 106.HRM_L2=''AKTAL-LTD PERSON_CTRY_CODE=KZ PERSON_NAME=''AKTAL-LTD' SECTOR=COMPANY PERSON_ADDRESS=HRM_L2_Step23=''AKTAL-LTD PERSON_NAME_Step23=''AKTAL-LTD' HRM_L2_B= HRM_L2_address=chflagHRM_L2_Bv23=0 PERSON_NAME_B= PERSON_NAME_address= chflagPERSON_NAME_Bv23=0 HRM_L2_B_Step23=PERSON_NAME_B_Step23= RegExID=1 start=3 stop=11 pos=0 length=0 HRM_L2_inB='AKTAL-LTDHRM_L2_noB=AKTAL-LTD _ERROR_=1 _N_=2035185&lt;/PRE&gt;
&lt;P&gt;the only line with substr function is:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;do while (pos &amp;gt; 0);
    &amp;amp;COMPANY_NAME._inB = substr(&amp;amp;COMPANY_NAME._Step23, pos+1, length-2);&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;where 3rd argument is defined as&amp;nbsp;&lt;STRONG&gt;length-2,&amp;nbsp;&amp;nbsp;&lt;/STRONG&gt;while, according to the note, length=0 and&amp;nbsp;&lt;STRONG&gt;length-2&lt;/STRONG&gt; is negative, an invalid length.&lt;/P&gt;
&lt;P&gt;You should check those observation (for example&amp;nbsp;&lt;STRONG&gt;_N_=2035185&lt;/STRONG&gt;) why is length=0. Is there no company name ?&lt;/P&gt;
&lt;P&gt;Add code to deal with those observations.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;5) You assigned argument no= in the macro but never used it (&amp;amp;no does not exist in your code).&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;What you intended to do with it ?&lt;/P&gt;</description>
      <pubDate>Mon, 22 Apr 2019 06:33:03 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/split-the-variable-based-on-single-quotation-marks/m-p/552760#M153690</guid>
      <dc:creator>Shmuel</dc:creator>
      <dc:date>2019-04-22T06:33:03Z</dc:date>
    </item>
  </channel>
</rss>

