## Class (confidence) intervals

Frequent Contributor
Posts: 115

# Class (confidence) intervals

Good morning my SAS friends:

Here is a question about SAS basic computing

As we know, confidence interval (CLASS) is a usual statistical procedure where we group many observations in CLASSES considering the upper and lower limits and the number of observations (n) as grouping criteria (see this example http://www.vitutor.com/statistics/descriptive/frequency_distribution.html)

Considering these data:

3, 15, 24, 28, 33, 35, 38, 42, 43, 38, 36, 34, 29, 25, 17, 7, 34, 36, 39, 44, 31, 26, 20, 11, 13, 22, 27, 47, 39, 37, 34, 32, 35, 28, 38, 41, 48, 15, 32, 13.

In this case, 48 − 3 = 45. For the purpose of this table, increase the number to 50. Therefore, 50 : 5 = 10 intervals.

xi    fi    Fi    ni    Ni
[0, 5)        2.5    1    1    0.025    0.025
[5, 10)        7.5    1    2    0.025    0.050
[10, 15)    12.5    3    5    0.075    0.125
[15, 20)    17.5    3    8    0.075    0.200
[20, 25)    22.5    3    11    0.075    0.275
[25, 30)    27.5    6    17    0.150    0.425
[30, 35)    32.5    7    24    0.175    0.600
[35, 40)    37.5    10    34    0.250    0.850
[40, 45)    42.5    4    38    0.100    0.950
[45, 50)    47.5    2    40    0.050    1
40         1

Is there any SAS Statement that could help???

Posts: 3,066

## Re: Class (confidence) intervals

[ Edited ]

These are NOT confidence intervals.

You want to apply a format that groups your data into the intervals shown, and then run PROC FREQ on this data.

Something like this (where you do the rest of the typing on line 2)

```proc format;
value xf 0-4.99='0-5' 5-9.99='5-10' ... ;
run;

proc freq;
table x;
format xf.;
run;
```
--
Paige Miller
Frequent Contributor
Posts: 115

## Re: Class (confidence) intervals

proc freq;
110 table x;
111 format xf.;
___
22
76
ERROR 22-322: Syntax error, expecting one of the following: a name, _ALL_, _CHARACTER_, _CHAR_, _NUMERIC_.
ERROR 76-322: Syntax error, statement will be ignored.
Super User
Posts: 23,776

## Re: Class (confidence) intervals

Where's the data = in proc freq? Check proc before as well for no errors.

Posts: 3,066

## Re: Class (confidence) intervals

jonatan_velarde wrote:
proc freq;
110 table x;
111 format xf.;
___
22
76
ERROR 22-322: Syntax error, expecting one of the following: a name, _ALL_, _CHARACTER_, _CHAR_, _NUMERIC_.
ERROR 76-322: Syntax error, statement will be ignored.

Simple omission on my part. The command should be

format x xf.;

--
Paige Miller
Valued Guide
Posts: 505

## Re: Class (confidence) intervals

``````WPS/SAS/R Class (confidence) intervals

IML has an interface to R
IML might have this function, I am not sure.

I think you want left close ']' otherwise tou could miss and observation

https://communities.sas.com/t5/General-SAS-Programming/Class-confidence-intervals/m-p/347383
HAVE
====

Up to 40 obs SD1.HAVE total obs=50

Obs    NUMS

1      3
2     15
3     24
4     28
5     33
6     35
7     38
8     42
9     43
...
46     42
47     43
48     14
49     30
50     10

WANT
====

Up to 40 obs from c2wps total obs=10

Obs      C1       FREQ

1    (0,5]        1
2    (5,10]       2
3    (10,15]      7
4    (15,20]      2
5    (20,25]      4
6    (25,30]      6
7    (30,35]     11
8    (35,40]      8
9    (40,45]      6
10    (45,50]      3

The MEANS Procedure

Analysis Variable : NUMS

N                                       Lower 95%       Upper 95%
C1         Obs            Mean         Std Dev     CL for Mean     CL for Mean
------------------------------------------------------------------------------
(0,5]        1       3.0000000               .               .               .
(5,10]       2       8.5000000       2.1213203     -10.5593071      27.5593071
(10,15]      7      13.5714286       1.3972763      12.2791636      14.8636936
(15,20]      2      18.5000000       2.1213203      -0.5593071      37.5593071
(20,25]      4      23.2500000       1.5000000      20.8631653      25.6368347
(25,30]      6      28.0000000       1.4142136      26.5158739      29.4841261
(30,35]     11      33.2727273       1.5550504      32.2280302      34.3174244
(35,40]      8      37.6250000       1.1877349      36.6320287      38.6179713
(40,45]      6      42.5000000       1.0488088      41.3993426      43.6006574
(45,50]      3      47.6666667       0.5773503      46.2324491      49.1008842
------------------------------------------------------------------------------

WORKING CODE

R
c1 <- cut(have\$NUMS, breaks = seq(0, 50, by = 5));
proc means

*                _                  _       _
_ __ ___   __ _| | _____        __| | __ _| |_ __ _
| '_ ` _ \ / _` | |/ / _ \_____ / _` |/ _` | __/ _` |
| | | | | | (_| |   <  __/_____| (_| | (_| | || (_| |
|_| |_| |_|\__,_|_|\_\___|      \__,_|\__,_|\__\__,_|

;

options validvarname=upcase;
libname sd1 "d:/sd1";
data sd1.have;
input nums @@;
cards4;
3 15 24 28 33 35 38 42 43 38 36 34 29 25 17 7 34 36 39 44 31
26 20 11 13 22 27 47 39 37 34 32 35 28 38 41 48 15 32 13
14 22 35 48 31 42 43 14 30 10
;;;;
run;quit;

*____                 _       _   _
|  _ \      ___  ___ | |_   _| |_(_) ___  _ __
| |_) |____/ __|/ _ \| | | | | __| |/ _ \| '_ \
|  _ <_____\__ \ (_) | | |_| | |_| | (_) | | | |
|_| \_\    |___/\___/|_|\__,_|\__|_|\___/|_| |_|

;

%utl_submit_wps64('
libname sd1 "d:/sd1";
options set=R_HOME "C:/Program Files/R/R-3.3.2";
libname wrk "%sysfunc(pathname(work))";
proc r;
submit;
library(haven);
c1 <- cut(have\$NUMS, breaks = seq(0, 50, by = 5));
c1;
c2<-as.data.frame(table(c1));
endsubmit;
import r=c2 data=wrk.c2wps;
import r=c1 data=wrk.c1wps;
run;quit;
');

data cutval;
merge c1wps sd1.have;
run;quit;

/*
Up to 40 obs WORK.CUTVAL total obs=50

Obs      C1       NUMS

1    (0,5]        3
2    (10,15]     15
3    (20,25]     24
4    (25,30]     28
5    (30,35]     33
6    (30,35]     35
7    (35,40]     38
8    (40,45]     42
*/

proc means data=cutval mean std clm;
class c1;
var nums;
run;quit;

NOTE: Using R version 3.3.2 (2016-10-31) from C:/Program Files/R/R-3.3.2

NOTE: Submitting statements to R:

> library(haven);
> c1 <- cut(have\$NUMS, breaks = seq(0, 50, by = 5));
> c1;
> c2<-as.data.frame(table(c1));

NOTE: Processing of R statements complete

12        import r=c2 data=wrk.c2wps;
NOTE: Creating data set 'WRK.c2wps' from R data frame 'c2'
NOTE: Column names modified during import of 'c2'
NOTE: Data set "WRK.c2wps" has 10 observation(s) and 2 variable(s)

13        import r=c1 data=wrk.c1wps;
NOTE: Creating data set 'WRK.c1wps' from R data frame 'c1'

NOTE: Column names modified during import of 'c1'

NOTE: Data set "WRK.c1wps" has 50 observation(s) and 1 variable(s)

14        run;
NOTE: Procedure r step took :
real time : 0.655
cpu time  : 0.015

15        quit;

NOTE: Submitted statements took :
real time : 0.702
cpu time  : 0.046

``````
Discussion stats
• 5 replies
• 203 views
• 0 likes
• 4 in conversation