<?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 SAS Macro for Outlier Capping / Flooring. ERROR in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/SAS-Macro-for-Outlier-Capping-Flooring-ERROR/m-p/712170#M219498</link>
    <description>&lt;P&gt;I try to use this macro for counting outlier values in my variables.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;libname projekt "c:\";
libname projekt list;
data train;
set projekt.abt_sam_beh_train;
run;
data test_;
set train;
keep act_age;
run;

options nomprint mlogic symbolgen;
%macro outliers(input=,var=,output=);
%let Q1=;
%let Q3=;
%let varL=;
%let varH=;

%let n=%sysfunc(countw(&amp;amp;var));
%do i=1 %to &amp;amp;n;
%let val = %scan(&amp;amp;var,&amp;amp;i);
%let Q1=&amp;amp;Q1 &amp;amp;val._P25;
%let Q3=&amp;amp;Q3 &amp;amp;val._P75;
%let varL=&amp;amp;varL &amp;amp;val.L;
%let varH=&amp;amp;varH &amp;amp;val.H;
%end;

/* Calculate the quartiles and inter-quartile range using proc univariate */
proc means data=&amp;amp;input nway noprint;
var &amp;amp;var;
output out=temp P25= P75= /autoname;
run;

/* Extract the upper and lower limits into macro variables */
data temp;
set temp;
ID =1;
array varb(&amp;amp;n) &amp;amp;Q1;
array varc(&amp;amp;n) &amp;amp;Q3;
array lower(&amp;amp;n) &amp;amp;varL;
array upper(&amp;amp;n) &amp;amp;varH;
do i=1 do dim(varb);
lower(i)=varb(i)-3*(varc(i)-varb(i));
upper(i)=varc(i)+3*(varc(i)-varb(i));
end;
drop i _type_ _freq_;
run;

data temp1;
set &amp;amp;input=;
ID = 1;
run;

data &amp;amp;output;
merge tmp1 temp;
by ID;
array var(&amp;amp;n) &amp;amp;var;
array lower(&amp;amp;n) &amp;amp;varL;
array upper(&amp;amp;n) &amp;amp;varH;
do i=1 to dim(var);
if not missing(var(i)) then do;
if var(i) &amp;lt; lower(i) then var(i) = lower(i);
if var(i) &amp;gt; upper(i) then var(i) = upper(i);
end;
end;
drop &amp;amp;Q1 &amp;amp;Q3 &amp;amp;varH &amp;amp;varL ID i;
run;
%mend;
%outliers(input=test_,var=act_age,output=what_i_want);&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;But I get this error all the time. Have someone's a hint for this error?&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;1                                                            System SAS                               18:24 Monday, January 18, 2021

1          ;*';*";*/;quit;run;
2          OPTIONS PAGENO=MIN;
3          %LET _CLIENTTASKLABEL='Makro liczby odstajce';
4          %LET _CLIENTPROCESSFLOWNAME='Przebieg procesu';
5          %LET _CLIENTPROJECTPATH='';
6          %LET _CLIENTPROJECTPATHHOST='ACER';
7          %LET _CLIENTPROJECTNAME='Projekt_sas.egp';
8          %LET _SASPROGRAMFILE=''
8        ! ;
9          %LET _SASPROGRAMFILEHOST='ACER';
10         
11         ODS _ALL_ CLOSE;
12         OPTIONS DEV=ACTIVEX;
13         GOPTIONS XPIXELS=0 YPIXELS=0;
14         FILENAME EGSR TEMP;
15         ODS tagsets.sasreport13(ID=EGSR) FILE=EGSR
16             STYLE=EGDefault
17             STYLESHEET=(URL="file:///s")
18             NOGTITLE
19             NOGFOOTNOTE
20             GPATH=&amp;amp;sasworklocation
SYMBOLGEN: Makrozmienną SASWORKLOCATION rozwinięto do postaci 
           "C:\Users\user\AppData\Roaming\SAS\EnterpriseGuide\EGTEMP\SEG-3288-4900df08\contents\SAS Temporary 
           Files\_TD14372_ACER_\Prc2/"
21             ENCODING=UTF8
22             options(rolap="on")
23         ;
NOTE: Writing TAGSETS.SASREPORT13(EGSR) Body file: EGSR
24         
25         GOPTIONS ACCESSIBLE;
26         libname projekt 
NOTE: Bibliotekę PROJEKT udało się przypisać jak następuje: 
      Mechanizm:        V9 
      Nazwa fizyczna: 
27         libname projekt list;
NOTE: Libref=   PROJEKT 
      Scope=    IOM ROOT COMP ENV%2nEngine=   V9%2nPhysical Name= a 
      zaliczeniowa\PROJEKT ZALICZENIOWY
      Nazwa pliku= 
28         data train;
29         set projekt.abt_sam_beh_train;
30         run;

NOTE: There were 52841 observations read from the data set PROJEKT.ABT_SAM_BEH_TRAIN.
NOTE: The data set WORK.TRAIN has 52841 observations and 2310 variables.
NOTE: DATA statement used (Total process time):
      real time           4.87 seconds
      cpu time            1.89 seconds
      

31         data test_;
32         set train;
33         keep act_age;
34         run;

NOTE: There were 52841 observations read from the data set WORK.TRAIN.
NOTE: The data set WORK.TEST_ has 52841 observations and 1 variables.
NOTE: DATA statement used (Total process time):
2                                                            System SAS                               18:24 Monday, January 18, 2021

      real time           4.70 seconds
      cpu time            0.32 seconds
      

35         
36         options nomprint mlogic symbolgen;
37         %macro outliers(input=,var=,output=);
38         %let Q1=;
39         %let Q3=;
40         %let varL=;
41         %let varH=;
42         
43         %let n=%sysfunc(countw(&amp;amp;var));
44         %do i=1 %to &amp;amp;n;
45         %let val = %scan(&amp;amp;var,&amp;amp;i);
46         %let Q1=&amp;amp;Q1 &amp;amp;val._P25;
47         %let Q3=&amp;amp;Q3 &amp;amp;val._P75;
48         %let varL=&amp;amp;varL &amp;amp;val.L;
49         %let varH=&amp;amp;varH &amp;amp;val.H;
50         %end;
51         
52         /* Calculate the quartiles and inter-quartile range using proc univariate */
53         proc means data=&amp;amp;input nway noprint;
54         var &amp;amp;var;
55         output out=temp P25= P75= /autoname;
56         run;
57         
58         /* Extract the upper and lower limits into macro variables */
59         data temp;
60         set temp;
61         ID =1;
62         array varb(&amp;amp;n) &amp;amp;Q1;
63         array varc(&amp;amp;n) &amp;amp;Q3;
64         array lower(&amp;amp;n) &amp;amp;varL;
65         array upper(&amp;amp;n) &amp;amp;varH;
66         do i=1 do dim(varb);
67         lower(i)=varb(i)-3*(varc(i)-varb(i));
68         upper(i)=varc(i)+3*(varc(i)-varb(i));
69         end;
70         drop i _type_ _freq_;
71         run;
72         
73         data temp1;
74         set &amp;amp;input=;
75         ID = 1;
76         run;
77         
78         data &amp;amp;output;
79         merge tmp1 temp;
80         by ID;
81         array var(&amp;amp;n) &amp;amp;var;
82         array lower(&amp;amp;n) &amp;amp;varL;
83         array upper(&amp;amp;n) &amp;amp;varH;
84         do i=1 to dim(var);
85         if not missing(var(i)) then do;
86         if var(i) &amp;lt; lower(i) then var(i) = lower(i);
87         if var(i) &amp;gt; upper(i) then var(i) = upper(i);
88         end;
3                                                            System SAS                               18:24 Monday, January 18, 2021

89         end;
90         drop &amp;amp;Q1 &amp;amp;Q3 &amp;amp;varH &amp;amp;varL ID i;
91         run;
92         %mend;
93         %outliers(input=test_,var=act_age,output=what_i_want);
MLOGIC(OUTLIERS): Początek wykonywania.
MLOGIC(OUTLIERS): Parametr INPUT ma wartość test_
MLOGIC(OUTLIERS): Parametr VAR ma wartość act_age
MLOGIC(OUTLIERS): Parametr OUTPUT ma wartość what_i_want
MLOGIC(OUTLIERS): %LET (nazwa zmiennej to Q1)
MLOGIC(OUTLIERS): %LET (nazwa zmiennej to Q3)
MLOGIC(OUTLIERS): %LET (nazwa zmiennej to VARL)
MLOGIC(OUTLIERS): %LET (nazwa zmiennej to VARH)
MLOGIC(OUTLIERS): %LET (nazwa zmiennej to N)
SYMBOLGEN: Makrozmienną VAR rozwinięto do postaci act_age
SYMBOLGEN: Makrozmienną N rozwinięto do postaci 1
MLOGIC(OUTLIERS): Początek pętli %DO. Zmienna indeksująca I. Wartość początkowa 1. Wartość końcowa 1. Wartość BY 1. 
MLOGIC(OUTLIERS): %LET (nazwa zmiennej to VAL)
SYMBOLGEN: Makrozmienną VAR rozwinięto do postaci act_age
SYMBOLGEN: Makrozmienną I rozwinięto do postaci 1
MLOGIC(OUTLIERS): %LET (nazwa zmiennej to Q1)
SYMBOLGEN: Makrozmienną Q1 rozwinięto do postaci 
SYMBOLGEN: Makrozmienną VAL rozwinięto do postaci act_age
MLOGIC(OUTLIERS): %LET (nazwa zmiennej to Q3)
SYMBOLGEN: Makrozmienną Q3 rozwinięto do postaci 
SYMBOLGEN: Makrozmienną VAL rozwinięto do postaci act_age
MLOGIC(OUTLIERS): %LET (nazwa zmiennej to VARL)
SYMBOLGEN: Makrozmienną VARL rozwinięto do postaci 
SYMBOLGEN: Makrozmienną VAL rozwinięto do postaci act_age
MLOGIC(OUTLIERS): %LET (nazwa zmiennej to VARH)
SYMBOLGEN: Makrozmienną VARH rozwinięto do postaci 
SYMBOLGEN: Makrozmienną VAL rozwinięto do postaci act_age
MLOGIC(OUTLIERS):  %DO loop index variable I is now 2; loop will not iterate again.
SYMBOLGEN: Makrozmienną INPUT rozwinięto do postaci test_
SYMBOLGEN: Makrozmienną VAR rozwinięto do postaci act_age

NOTE: There were 52841 observations read from the data set WORK.TEST_.
NOTE: The data set WORK.TEMP has 1 observations and 4 variables.
NOTE: PROCEDURE MEANS used (Total process time):
      real time           0.01 seconds
      cpu time            0.01 seconds
      

SYMBOLGEN: Makrozmienną N rozwinięto do postaci 1
SYMBOLGEN: Makrozmienną Q1 rozwinięto do postaci act_age_P25
SYMBOLGEN: Makrozmienną N rozwinięto do postaci 1
SYMBOLGEN: Makrozmienną Q3 rozwinięto do postaci act_age_P75
SYMBOLGEN: Makrozmienną N rozwinięto do postaci 1
SYMBOLGEN: Makrozmienną VARL rozwinięto do postaci act_ageL
SYMBOLGEN: Makrozmienną N rozwinięto do postaci 1
SYMBOLGEN: Makrozmienną VARH rozwinięto do postaci act_ageH
388: LINE and COLUMN cannot be determined.
NOTE: NOSPOOL is on. Rerunning with OPTION SPOOL might allow recovery of the LINE and COLUMN where the error has occurred.
ERROR 388-185: Expecting an arithmetic operator.
76: LINE and COLUMN cannot be determined.
NOTE: NOSPOOL is on. Rerunning with OPTION SPOOL might allow recovery of the LINE and COLUMN where the error has occurred.
ERROR 76-322: Błąd składni. Instrukcja zostanie zignorowana.

4                                                            System SAS                               18:24 Monday, January 18, 2021

NOTE: The SAS System stopped processing this step because of errors.
WARNING: The data set WORK.TEMP may be incomplete.  When this step was stopped there were 0 observations and 5 variables.
WARNING: Data set WORK.TEMP was not replaced because this step was stopped.
NOTE: DATA statement used (Total process time):
      real time           0.01 seconds
      cpu time            0.01 seconds
      

SYMBOLGEN: Makrozmienną INPUT rozwinięto do postaci test_
22: LINE and COLUMN cannot be determined.
NOTE 242-205: NOSPOOL is on. Rerunning with OPTION SPOOL might allow recovery of the LINE and COLUMN where the error has occurred.
ERROR 22-322: Błąd składni. Oczekiwano jednej z następujących: nazwy, łańcucha w nawiasach, (, -, :, ;, CUROBS, END, INDSNAME, KEY, 
              KEYRESET, KEYS, NOBS, OPEN, POINT, _DATA_, _LAST_, _NULL_.  
200: LINE and COLUMN cannot be determined.
NOTE: NOSPOOL is on. Rerunning with OPTION SPOOL might allow recovery of the LINE and COLUMN where the error has occurred.
ERROR 200-322: The symbol is not recognized and will be ignored.
NOTE: The SAS System stopped processing this step because of errors.
WARNING: The data set WORK.TEMP1 may be incomplete.  When this step was stopped there were 0 observations and 2 variables.
WARNING: Data set WORK.TEMP1 was not replaced because this step was stopped.
NOTE: DATA statement used (Total process time):
      real time           0.00 seconds
      cpu time            0.00 seconds
      

SYMBOLGEN: Makrozmienną OUTPUT rozwinięto do postaci what_i_want
ERROR: Plik WORK.TMP1.DATA nie istnieje.
NOTE: The array var has the same name as a SAS-supplied or user-defined function.  Parentheses following this name are treated as 
      array references and not function references.
SYMBOLGEN: Makrozmienną N rozwinięto do postaci 1
SYMBOLGEN: Makrozmienną VAR rozwinięto do postaci act_age
SYMBOLGEN: Makrozmienną N rozwinięto do postaci 1
SYMBOLGEN: Makrozmienną VARL rozwinięto do postaci act_ageL
SYMBOLGEN: Makrozmienną N rozwinięto do postaci 1
SYMBOLGEN: Makrozmienną VARH rozwinięto do postaci act_ageH
SYMBOLGEN: Makrozmienną Q1 rozwinięto do postaci act_age_P25
SYMBOLGEN: Makrozmienną Q3 rozwinięto do postaci act_age_P75
SYMBOLGEN: Makrozmienną VARH rozwinięto do postaci act_ageH
SYMBOLGEN: Makrozmienną VARL rozwinięto do postaci act_ageL

WARNING: The variable ID in the DROP, KEEP, or RENAME list has never been referenced.
NOTE: The SAS System stopped processing this step because of errors.
WARNING: The data set WORK.WHAT_I_WANT may be incomplete.  When this step was stopped there were 0 observations and 3 variables.
NOTE: DATA statement used (Total process time):
      real time           0.01 seconds
      cpu time            0.01 seconds
      

MLOGIC(OUTLIERS): Koniec wykonywania.
94         
95         GOPTIONS NOACCESSIBLE;
96         %LET _CLIENTTASKLABEL=;
97         %LET _CLIENTPROCESSFLOWNAME=;
98         %LET _CLIENTPROJECTPATH=;
99         %LET _CLIENTPROJECTPATHHOST=;
100        %LET _CLIENTPROJECTNAME=;
101        %LET _SASPROGRAMFILE=;
102        %LET _SASPROGRAMFILEHOST=;
103        
5                                                            System SAS                               18:24 Monday, January 18, 2021

104        ;*';*";*/;quit;run;
105        ODS _ALL_ CLOSE;
106        
107        
108        QUIT; RUN;
109        &lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Thu, 15 Apr 2021 10:15:22 GMT</pubDate>
    <dc:creator>x3d1m4</dc:creator>
    <dc:date>2021-04-15T10:15:22Z</dc:date>
    <item>
      <title>SAS Macro for Outlier Capping / Flooring. ERROR</title>
      <link>https://communities.sas.com/t5/SAS-Programming/SAS-Macro-for-Outlier-Capping-Flooring-ERROR/m-p/712170#M219498</link>
      <description>&lt;P&gt;I try to use this macro for counting outlier values in my variables.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;libname projekt "c:\";
libname projekt list;
data train;
set projekt.abt_sam_beh_train;
run;
data test_;
set train;
keep act_age;
run;

options nomprint mlogic symbolgen;
%macro outliers(input=,var=,output=);
%let Q1=;
%let Q3=;
%let varL=;
%let varH=;

%let n=%sysfunc(countw(&amp;amp;var));
%do i=1 %to &amp;amp;n;
%let val = %scan(&amp;amp;var,&amp;amp;i);
%let Q1=&amp;amp;Q1 &amp;amp;val._P25;
%let Q3=&amp;amp;Q3 &amp;amp;val._P75;
%let varL=&amp;amp;varL &amp;amp;val.L;
%let varH=&amp;amp;varH &amp;amp;val.H;
%end;

/* Calculate the quartiles and inter-quartile range using proc univariate */
proc means data=&amp;amp;input nway noprint;
var &amp;amp;var;
output out=temp P25= P75= /autoname;
run;

/* Extract the upper and lower limits into macro variables */
data temp;
set temp;
ID =1;
array varb(&amp;amp;n) &amp;amp;Q1;
array varc(&amp;amp;n) &amp;amp;Q3;
array lower(&amp;amp;n) &amp;amp;varL;
array upper(&amp;amp;n) &amp;amp;varH;
do i=1 do dim(varb);
lower(i)=varb(i)-3*(varc(i)-varb(i));
upper(i)=varc(i)+3*(varc(i)-varb(i));
end;
drop i _type_ _freq_;
run;

data temp1;
set &amp;amp;input=;
ID = 1;
run;

data &amp;amp;output;
merge tmp1 temp;
by ID;
array var(&amp;amp;n) &amp;amp;var;
array lower(&amp;amp;n) &amp;amp;varL;
array upper(&amp;amp;n) &amp;amp;varH;
do i=1 to dim(var);
if not missing(var(i)) then do;
if var(i) &amp;lt; lower(i) then var(i) = lower(i);
if var(i) &amp;gt; upper(i) then var(i) = upper(i);
end;
end;
drop &amp;amp;Q1 &amp;amp;Q3 &amp;amp;varH &amp;amp;varL ID i;
run;
%mend;
%outliers(input=test_,var=act_age,output=what_i_want);&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;But I get this error all the time. Have someone's a hint for this error?&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;1                                                            System SAS                               18:24 Monday, January 18, 2021

1          ;*';*";*/;quit;run;
2          OPTIONS PAGENO=MIN;
3          %LET _CLIENTTASKLABEL='Makro liczby odstajce';
4          %LET _CLIENTPROCESSFLOWNAME='Przebieg procesu';
5          %LET _CLIENTPROJECTPATH='';
6          %LET _CLIENTPROJECTPATHHOST='ACER';
7          %LET _CLIENTPROJECTNAME='Projekt_sas.egp';
8          %LET _SASPROGRAMFILE=''
8        ! ;
9          %LET _SASPROGRAMFILEHOST='ACER';
10         
11         ODS _ALL_ CLOSE;
12         OPTIONS DEV=ACTIVEX;
13         GOPTIONS XPIXELS=0 YPIXELS=0;
14         FILENAME EGSR TEMP;
15         ODS tagsets.sasreport13(ID=EGSR) FILE=EGSR
16             STYLE=EGDefault
17             STYLESHEET=(URL="file:///s")
18             NOGTITLE
19             NOGFOOTNOTE
20             GPATH=&amp;amp;sasworklocation
SYMBOLGEN: Makrozmienną SASWORKLOCATION rozwinięto do postaci 
           "C:\Users\user\AppData\Roaming\SAS\EnterpriseGuide\EGTEMP\SEG-3288-4900df08\contents\SAS Temporary 
           Files\_TD14372_ACER_\Prc2/"
21             ENCODING=UTF8
22             options(rolap="on")
23         ;
NOTE: Writing TAGSETS.SASREPORT13(EGSR) Body file: EGSR
24         
25         GOPTIONS ACCESSIBLE;
26         libname projekt 
NOTE: Bibliotekę PROJEKT udało się przypisać jak następuje: 
      Mechanizm:        V9 
      Nazwa fizyczna: 
27         libname projekt list;
NOTE: Libref=   PROJEKT 
      Scope=    IOM ROOT COMP ENV%2nEngine=   V9%2nPhysical Name= a 
      zaliczeniowa\PROJEKT ZALICZENIOWY
      Nazwa pliku= 
28         data train;
29         set projekt.abt_sam_beh_train;
30         run;

NOTE: There were 52841 observations read from the data set PROJEKT.ABT_SAM_BEH_TRAIN.
NOTE: The data set WORK.TRAIN has 52841 observations and 2310 variables.
NOTE: DATA statement used (Total process time):
      real time           4.87 seconds
      cpu time            1.89 seconds
      

31         data test_;
32         set train;
33         keep act_age;
34         run;

NOTE: There were 52841 observations read from the data set WORK.TRAIN.
NOTE: The data set WORK.TEST_ has 52841 observations and 1 variables.
NOTE: DATA statement used (Total process time):
2                                                            System SAS                               18:24 Monday, January 18, 2021

      real time           4.70 seconds
      cpu time            0.32 seconds
      

35         
36         options nomprint mlogic symbolgen;
37         %macro outliers(input=,var=,output=);
38         %let Q1=;
39         %let Q3=;
40         %let varL=;
41         %let varH=;
42         
43         %let n=%sysfunc(countw(&amp;amp;var));
44         %do i=1 %to &amp;amp;n;
45         %let val = %scan(&amp;amp;var,&amp;amp;i);
46         %let Q1=&amp;amp;Q1 &amp;amp;val._P25;
47         %let Q3=&amp;amp;Q3 &amp;amp;val._P75;
48         %let varL=&amp;amp;varL &amp;amp;val.L;
49         %let varH=&amp;amp;varH &amp;amp;val.H;
50         %end;
51         
52         /* Calculate the quartiles and inter-quartile range using proc univariate */
53         proc means data=&amp;amp;input nway noprint;
54         var &amp;amp;var;
55         output out=temp P25= P75= /autoname;
56         run;
57         
58         /* Extract the upper and lower limits into macro variables */
59         data temp;
60         set temp;
61         ID =1;
62         array varb(&amp;amp;n) &amp;amp;Q1;
63         array varc(&amp;amp;n) &amp;amp;Q3;
64         array lower(&amp;amp;n) &amp;amp;varL;
65         array upper(&amp;amp;n) &amp;amp;varH;
66         do i=1 do dim(varb);
67         lower(i)=varb(i)-3*(varc(i)-varb(i));
68         upper(i)=varc(i)+3*(varc(i)-varb(i));
69         end;
70         drop i _type_ _freq_;
71         run;
72         
73         data temp1;
74         set &amp;amp;input=;
75         ID = 1;
76         run;
77         
78         data &amp;amp;output;
79         merge tmp1 temp;
80         by ID;
81         array var(&amp;amp;n) &amp;amp;var;
82         array lower(&amp;amp;n) &amp;amp;varL;
83         array upper(&amp;amp;n) &amp;amp;varH;
84         do i=1 to dim(var);
85         if not missing(var(i)) then do;
86         if var(i) &amp;lt; lower(i) then var(i) = lower(i);
87         if var(i) &amp;gt; upper(i) then var(i) = upper(i);
88         end;
3                                                            System SAS                               18:24 Monday, January 18, 2021

89         end;
90         drop &amp;amp;Q1 &amp;amp;Q3 &amp;amp;varH &amp;amp;varL ID i;
91         run;
92         %mend;
93         %outliers(input=test_,var=act_age,output=what_i_want);
MLOGIC(OUTLIERS): Początek wykonywania.
MLOGIC(OUTLIERS): Parametr INPUT ma wartość test_
MLOGIC(OUTLIERS): Parametr VAR ma wartość act_age
MLOGIC(OUTLIERS): Parametr OUTPUT ma wartość what_i_want
MLOGIC(OUTLIERS): %LET (nazwa zmiennej to Q1)
MLOGIC(OUTLIERS): %LET (nazwa zmiennej to Q3)
MLOGIC(OUTLIERS): %LET (nazwa zmiennej to VARL)
MLOGIC(OUTLIERS): %LET (nazwa zmiennej to VARH)
MLOGIC(OUTLIERS): %LET (nazwa zmiennej to N)
SYMBOLGEN: Makrozmienną VAR rozwinięto do postaci act_age
SYMBOLGEN: Makrozmienną N rozwinięto do postaci 1
MLOGIC(OUTLIERS): Początek pętli %DO. Zmienna indeksująca I. Wartość początkowa 1. Wartość końcowa 1. Wartość BY 1. 
MLOGIC(OUTLIERS): %LET (nazwa zmiennej to VAL)
SYMBOLGEN: Makrozmienną VAR rozwinięto do postaci act_age
SYMBOLGEN: Makrozmienną I rozwinięto do postaci 1
MLOGIC(OUTLIERS): %LET (nazwa zmiennej to Q1)
SYMBOLGEN: Makrozmienną Q1 rozwinięto do postaci 
SYMBOLGEN: Makrozmienną VAL rozwinięto do postaci act_age
MLOGIC(OUTLIERS): %LET (nazwa zmiennej to Q3)
SYMBOLGEN: Makrozmienną Q3 rozwinięto do postaci 
SYMBOLGEN: Makrozmienną VAL rozwinięto do postaci act_age
MLOGIC(OUTLIERS): %LET (nazwa zmiennej to VARL)
SYMBOLGEN: Makrozmienną VARL rozwinięto do postaci 
SYMBOLGEN: Makrozmienną VAL rozwinięto do postaci act_age
MLOGIC(OUTLIERS): %LET (nazwa zmiennej to VARH)
SYMBOLGEN: Makrozmienną VARH rozwinięto do postaci 
SYMBOLGEN: Makrozmienną VAL rozwinięto do postaci act_age
MLOGIC(OUTLIERS):  %DO loop index variable I is now 2; loop will not iterate again.
SYMBOLGEN: Makrozmienną INPUT rozwinięto do postaci test_
SYMBOLGEN: Makrozmienną VAR rozwinięto do postaci act_age

NOTE: There were 52841 observations read from the data set WORK.TEST_.
NOTE: The data set WORK.TEMP has 1 observations and 4 variables.
NOTE: PROCEDURE MEANS used (Total process time):
      real time           0.01 seconds
      cpu time            0.01 seconds
      

SYMBOLGEN: Makrozmienną N rozwinięto do postaci 1
SYMBOLGEN: Makrozmienną Q1 rozwinięto do postaci act_age_P25
SYMBOLGEN: Makrozmienną N rozwinięto do postaci 1
SYMBOLGEN: Makrozmienną Q3 rozwinięto do postaci act_age_P75
SYMBOLGEN: Makrozmienną N rozwinięto do postaci 1
SYMBOLGEN: Makrozmienną VARL rozwinięto do postaci act_ageL
SYMBOLGEN: Makrozmienną N rozwinięto do postaci 1
SYMBOLGEN: Makrozmienną VARH rozwinięto do postaci act_ageH
388: LINE and COLUMN cannot be determined.
NOTE: NOSPOOL is on. Rerunning with OPTION SPOOL might allow recovery of the LINE and COLUMN where the error has occurred.
ERROR 388-185: Expecting an arithmetic operator.
76: LINE and COLUMN cannot be determined.
NOTE: NOSPOOL is on. Rerunning with OPTION SPOOL might allow recovery of the LINE and COLUMN where the error has occurred.
ERROR 76-322: Błąd składni. Instrukcja zostanie zignorowana.

4                                                            System SAS                               18:24 Monday, January 18, 2021

NOTE: The SAS System stopped processing this step because of errors.
WARNING: The data set WORK.TEMP may be incomplete.  When this step was stopped there were 0 observations and 5 variables.
WARNING: Data set WORK.TEMP was not replaced because this step was stopped.
NOTE: DATA statement used (Total process time):
      real time           0.01 seconds
      cpu time            0.01 seconds
      

SYMBOLGEN: Makrozmienną INPUT rozwinięto do postaci test_
22: LINE and COLUMN cannot be determined.
NOTE 242-205: NOSPOOL is on. Rerunning with OPTION SPOOL might allow recovery of the LINE and COLUMN where the error has occurred.
ERROR 22-322: Błąd składni. Oczekiwano jednej z następujących: nazwy, łańcucha w nawiasach, (, -, :, ;, CUROBS, END, INDSNAME, KEY, 
              KEYRESET, KEYS, NOBS, OPEN, POINT, _DATA_, _LAST_, _NULL_.  
200: LINE and COLUMN cannot be determined.
NOTE: NOSPOOL is on. Rerunning with OPTION SPOOL might allow recovery of the LINE and COLUMN where the error has occurred.
ERROR 200-322: The symbol is not recognized and will be ignored.
NOTE: The SAS System stopped processing this step because of errors.
WARNING: The data set WORK.TEMP1 may be incomplete.  When this step was stopped there were 0 observations and 2 variables.
WARNING: Data set WORK.TEMP1 was not replaced because this step was stopped.
NOTE: DATA statement used (Total process time):
      real time           0.00 seconds
      cpu time            0.00 seconds
      

SYMBOLGEN: Makrozmienną OUTPUT rozwinięto do postaci what_i_want
ERROR: Plik WORK.TMP1.DATA nie istnieje.
NOTE: The array var has the same name as a SAS-supplied or user-defined function.  Parentheses following this name are treated as 
      array references and not function references.
SYMBOLGEN: Makrozmienną N rozwinięto do postaci 1
SYMBOLGEN: Makrozmienną VAR rozwinięto do postaci act_age
SYMBOLGEN: Makrozmienną N rozwinięto do postaci 1
SYMBOLGEN: Makrozmienną VARL rozwinięto do postaci act_ageL
SYMBOLGEN: Makrozmienną N rozwinięto do postaci 1
SYMBOLGEN: Makrozmienną VARH rozwinięto do postaci act_ageH
SYMBOLGEN: Makrozmienną Q1 rozwinięto do postaci act_age_P25
SYMBOLGEN: Makrozmienną Q3 rozwinięto do postaci act_age_P75
SYMBOLGEN: Makrozmienną VARH rozwinięto do postaci act_ageH
SYMBOLGEN: Makrozmienną VARL rozwinięto do postaci act_ageL

WARNING: The variable ID in the DROP, KEEP, or RENAME list has never been referenced.
NOTE: The SAS System stopped processing this step because of errors.
WARNING: The data set WORK.WHAT_I_WANT may be incomplete.  When this step was stopped there were 0 observations and 3 variables.
NOTE: DATA statement used (Total process time):
      real time           0.01 seconds
      cpu time            0.01 seconds
      

MLOGIC(OUTLIERS): Koniec wykonywania.
94         
95         GOPTIONS NOACCESSIBLE;
96         %LET _CLIENTTASKLABEL=;
97         %LET _CLIENTPROCESSFLOWNAME=;
98         %LET _CLIENTPROJECTPATH=;
99         %LET _CLIENTPROJECTPATHHOST=;
100        %LET _CLIENTPROJECTNAME=;
101        %LET _SASPROGRAMFILE=;
102        %LET _SASPROGRAMFILEHOST=;
103        
5                                                            System SAS                               18:24 Monday, January 18, 2021

104        ;*';*";*/;quit;run;
105        ODS _ALL_ CLOSE;
106        
107        
108        QUIT; RUN;
109        &lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 15 Apr 2021 10:15:22 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/SAS-Macro-for-Outlier-Capping-Flooring-ERROR/m-p/712170#M219498</guid>
      <dc:creator>x3d1m4</dc:creator>
      <dc:date>2021-04-15T10:15:22Z</dc:date>
    </item>
    <item>
      <title>Re: SAS Macro for Outlier Capping / Flooring. ERROR</title>
      <link>https://communities.sas.com/t5/SAS-Programming/SAS-Macro-for-Outlier-Capping-Flooring-ERROR/m-p/712192#M219510</link>
      <description>&lt;P&gt;Hello&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/364476"&gt;@x3d1m4&lt;/a&gt;,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;There are just a few typos in the code:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;
&lt;PRE&gt;do i=1 &lt;FONT color="#FF0000"&gt;&lt;STRONG&gt;d&lt;/STRONG&gt;&lt;/FONT&gt;o dim(varb);&lt;/PRE&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;PRE&gt;set &amp;amp;input&lt;STRONG&gt;&lt;FONT color="#FF0000"&gt;=&lt;/FONT&gt;&lt;/STRONG&gt;;&lt;/PRE&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;PRE&gt;merge &lt;STRONG&gt;&lt;FONT color="#FF0000"&gt;tm&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT color="#FF0000"&gt;&lt;FONT color="#000000"&gt;p1&lt;/FONT&gt;&lt;/FONT&gt; temp;&lt;/PRE&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;The code can also be simplified, e.g., you don't need to create the dummy BY variable ID=1 if you use two SET statements (instead of the MERGE statement) like this:&lt;/P&gt;
&lt;PRE&gt;data &amp;amp;output;
&lt;STRONG&gt;if _n_=1 then set temp;&lt;/STRONG&gt;
set temp1;
...
&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;I would also avoid using a function name (&lt;FONT face="courier new,courier"&gt;var&lt;/FONT&gt;) as an array name (see the corresponding note in the log: "&lt;FONT face="courier new,courier"&gt;The array var has the same name as a SAS-supplied or user-defined function. ...&lt;/FONT&gt;"). To guard against possible name conflicts I would use the &lt;A href="https://documentation.sas.com/?cdcId=pgmsascdc&amp;amp;cdcVersion=9.4_3.5&amp;amp;docsetId=mcrolref&amp;amp;docsetTarget=p0ivgabci0y2den1usf43mxdkpgp.htm&amp;amp;locale=en" target="_blank" rel="noopener"&gt;%LOCAL statement&lt;/A&gt; and avoid generic dataset names like &lt;FONT face="courier new,courier"&gt;temp&lt;/FONT&gt;&amp;nbsp;in a macro (remembering a case where a standard macro using that name was applied to a dataset &lt;FONT face="courier new,courier"&gt;temp&lt;/FONT&gt;&amp;nbsp;containing&amp;nbsp;&lt;EM&gt;temp&lt;/EM&gt;erature measurements ...). Also the comments need a revision (&lt;FONT face="courier new,courier"&gt;univariate&lt;/FONT&gt;? &lt;FONT face="courier new,courier"&gt;macro variables&lt;/FONT&gt;?).&lt;/P&gt;</description>
      <pubDate>Mon, 18 Jan 2021 19:01:08 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/SAS-Macro-for-Outlier-Capping-Flooring-ERROR/m-p/712192#M219510</guid>
      <dc:creator>FreelanceReinh</dc:creator>
      <dc:date>2021-01-18T19:01:08Z</dc:date>
    </item>
  </channel>
</rss>

