Hello
There is an error in this code that create format.
What is the way to solve it?
proc format;
value Fmt
-999='(a) A=0 AND B not 0'
-888='(b) A=0 AND B=0'
-777='(c) B=0 AND A not 0'
0='(d) A>0 AND B=0'
0<-25='(e1) Ratio till 25%'
25<-50='(e2) 25%<Ratio<=50%'
50<-75='(e3) 50%<Ratio<=75%'
75<-85='(e4) 75%<Ratio<=85%'
85<-95='(e5) 85%<Ratio<=95%'
95<100='(e6) 95%<Ratio<100%'
100='(e7) Ratio=100%'
100<-105='(f1) 100%<Ratio<=105%'
105<-115='(f2) 105%<Ratio<=115%'
115<-125='(f3) 115%<Ratio<=125%'
125<-150='(f4) 125%<Ratio<=150%'
150<-HIGH='(f5) 150%+'
other='(g) Negative Ratio'
;
Run;
error
1 The SAS System 10:31 Monday, May 27, 2024
1 ;*';*";*/;quit;run;
2 OPTIONS PAGENO=MIN;
3 %LET _CLIENTTASKLABEL='Program (2)';
4 %LET _CLIENTPROCESSFLOWNAME='Process Flow';
5 %LET _CLIENTPROJECTPATH='';
6 %LET _CLIENTPROJECTPATHHOST='';
7 %LET _CLIENTPROJECTNAME='';
8 %LET _SASPROGRAMFILE='';
9 %LET _SASPROGRAMFILEHOST='';
10
11 ODS _ALL_ CLOSE;
12 OPTIONS DEV=PNG;
13 GOPTIONS XPIXELS=0 YPIXELS=0;
14 FILENAME EGSR TEMP;
15 ODS tagsets.sasreport13(ID=EGSR) FILE=EGSR
16 STYLE=HTMLBlue
17 STYLESHEET=(URL="file:///C:/Program%20Files/SASHome/SASEnterpriseGuide/7.1/Styles/HTMLBlue.css")
18 NOGTITLE
19 NOGFOOTNOTE
20 GPATH=&sasworklocation
21 ENCODING=UTF8
22 options(rolap="on")
23 ;
NOTE: Writing TAGSETS.SASREPORT13(EGSR) Body file: EGSR
24
25 GOPTIONS ACCESSIBLE;
26 proc format;
27 value Fmt
28 -999='(a) A=0 AND B not 0'
29 -888='(b) A=0 AND B=0'
30 -777='(c) B=0 AND A not 0'
31 0='(d) A>0 AND B=0'
32 0<-25='(e1) Ratio till 25%'
33 25<-50='(e2) 25%<Ratio<=50%'
34 50<-75='(e3) 50%<Ratio<=75%'
35 75<-85='(e4) 75%<Ratio<=85%'
36 85<-95='(e5) 85%<Ratio<=95%'
37 95<100='(e6) 95%<Ratio<100%'
___
22
76
ERROR 22-322: Syntax error, expecting one of the following: ',', -.
ERROR 76-322: Syntax error, statement will be ignored.
38 100='(e7) Ratio=100%'
39 100<-105='(f1) 100%<Ratio<=105%'
40 105<-115='(f2) 105%<Ratio<=115%'
41 115<-125='(f3) 115%<Ratio<=125%'
42 125<-150='(f4) 125%<Ratio<=150%'
43 150<-HIGH='(f5) 150%+'
44 other='(g) Negative Ratio'
45 ;
NOTE: The previous statement has been deleted.
46 Run;
2 The SAS System 10:31 Monday, May 27, 2024
NOTE: PROCEDURE FORMAT used (Total process time):
real time 0.00 seconds
user cpu time 0.01 seconds
system cpu time 0.00 seconds
memory 73.81k
OS Memory 27300.00k
Timestamp 05/28/2024 07:26:06 AM
Step Count 157 Switch Count 0
Page Faults 0
Page Reclaims 7
Page Swaps 0
Voluntary Context Switches 3
Involuntary Context Switches 1
Block Input Operations 0
Block Output Operations 0
NOTE: The SAS System stopped processing this step because of errors.
47
48 GOPTIONS NOACCESSIBLE;
49 %LET _CLIENTTASKLABEL=;
50 %LET _CLIENTPROCESSFLOWNAME=;
51 %LET _CLIENTPROJECTPATH=;
52 %LET _CLIENTPROJECTPATHHOST=;
53 %LET _CLIENTPROJECTNAME=;
54 %LET _SASPROGRAMFILE=;
55 %LET _SASPROGRAMFILEHOST=;
56
57 ;*';*";*/;quit;run;
58 ODS _ALL_ CLOSE;
59
60
61 QUIT; RUN;
62
95<100='(e6) 95%<Ratio<100%'
100='(e7) Ratio=100%'
I want that 100 will be a separate group
I want that group 95<100 will be between 95(not included) and 100 (not included)
95<-100
Add the dash!
Below your format fixed BUT it will likely not return what you're after. Just try with a few values like 100. The format definition will likely some amendment to return the desired label for a specific value.
proc format;
value Fmt
-999 ='(a) A=0 AND B not 0'
-888 ='(b) A=0 AND B=0'
-777 ='(c) B=0 AND A not 0'
0 ='(d) A>0 AND B=0'
0<-25 ='(e1) Ratio till 25%'
25<-50 ='(e2) 25%<Ratio<=50%'
50<-75 ='(e3) 50%<Ratio<=75%'
75<-85 ='(e4) 75%<Ratio<=85%'
85<-95 ='(e5) 85%<Ratio<=95%'
95<-100 ='(e6) 95%<Ratio<100%'
100 ='(e7) Ratio=100%'
100<-105 ='(f1) 100%<Ratio<=105%'
105<-115 ='(f2) 105%<Ratio<=115%'
115<-125 ='(f3) 115%<Ratio<=125%'
125<-150 ='(f4) 125%<Ratio<=150%'
150<-HIGH ='(f5) 150%+'
other ='(g) Negative Ratio'
;
Run;
Given your label I assume what you really want is for values around 100 (haven't checked the rest):
95<-<100 ='(e6) 95%<Ratio<100%'
100 ='(e7) Ratio=100%'
100<-105 ='(f1) 100%<Ratio<=105%'
Thanks,
However I don't understand something.
There are 2 groups that 100 is included in their definition
In the group defined by 95<-100 I see dash next to 100.Does it mean that 100 is included?
95<-100='(e6) 95%<Ratio<100%'
100='(e7) Ratio=100%'
Hint:
Angular brackets are used to exclude the end values from the range. They can appear on both sides of the dash.
@Ronein I believe what you're really after is what I shared already.
95<-<100 ='(e6) 95%<Ratio<100%'
100 ='(e7) Ratio=100%'
100<-105 ='(f1) 100%<Ratio<=105%
If not 100% if things work as desired then it's also always a good idea to mock-up some sample data for testing. Like 3 rows with values 99, 100, 101 and then test how the formatted values look like.
It's finally time to hack! Remember to visit the SAS Hacker's Hub regularly for news and updates.
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.