Subversion Repositories wimsdev

Rev

Rev 4161 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
20 reyssat 1
!if $wims_read_parm!=slib_header
2
 !goto proc
3
!endif
4
slib_title=Frequencies of statistical data
5
slib_parms=2\
6
 ,[x_1,...,x_n]\
7
 ,[a_1,...,a_m]
8
slib_author=Adeline Grelot et Bernadette PERRIN-RIOU
9
slib_out=[frequencies of data with respect to classes ],[ classes data](with min and max if necessary)
10
slib_comment= if only 2 numbers in classes data, first one is the smaller, second one the width of classes ;\
11
If no classes, classes are created of width ceil(4*n^(1/4))
12
The length of the data numbers is limited.
13
slib_example=[1,1,1,3,4,5,6,2],[1,4,6]\
14
[1,1,1,3,4,5,6,2,7 ,4,7],[2,3,6]\
15
[1,1,1,3,4,5,6,2],[1,4]\
16
[1,1,1,3,4,5,6,2]
17
!exit
18
 
19
:proc
20
slib_out=
21
!readproc slib/stat/dataproc $wims_read_parm
22
 
23
slib_v=!declosing $slib_data
24
slib_w=!declosing $slib_weight
25
 
26
!if $slib_v$slib_w=$empty
27
	slib_out=0
28
	!exit
29
!else
30
	slib_v=!sort numeric item  of $slib_v
31
	slib_max=!item -1 of $slib_v
32
	slib_min=!item 1 of $slib_v
33
	slib_cnt= !itemcnt $slib_v
34
	slib_cntw=!itemcnt $slib_w
35
	!if $slib_cntw=2
36
		!distribute item $slib_w into slib_b,slib_p
37
		slib_c=$[ceil(($slib_max-$slib_b)/$slib_p)]
38
		slib_d=$[min(0,floor(($slib_min-($slib_b))/$slib_p))]
39
		slib_w=!values $slib_b+x*$slib_p for x=$slib_d to $slib_c
40
	!endif
41
	slib_w=!sort numeric item  of $slib_w
42
 
43
	!if $slib_w=$empty
44
		slib_N=$[ceil(4*($slib_cnt)^(1/4))]
45
		slib_w=!values $slib_min+x*$slib_N for x=0 to $[ceil(($slib_max-$slib_min)/$slib_N)]
46
	!else
47
		slib_m=!item -1 of $slib_w
48
		slib_max=$[max($slib_max,$slib_m)]
49
		slib_m=!item 1 of $slib_w
50
		slib_min=$[min($slib_min,$slib_m)]
51
		slib_w=$slib_min,$slib_w,$slib_max
52
		slib_w= !listuniq $slib_w
53
	!endif
54
	slib_cpt=0
55
	slib_cntw=!itemcnt $slib_w
56
	slib_wpointer=2
57
# end est le point de separation
58
	slib_end=!item $slib_wpointer of $slib_w
59
	slib_result=
60
	!for slib_i=1 to $slib_cnt
61
		 slib_dat=!item $slib_i of $slib_v
62
		 !if $slib_dat<$slib_end or ($slib_dat=$slib_max and $slib_wpointer=$slib_cntw)
63
  # On est toujours dans le meme intervalle
64
 			 !advance slib_cpt
65
 		!else
66
  # Le point de separation franchi    
67
  # creer un nouveau point de separation
68
:point
69
  			!advance slib_wpointer 
70
 			slib_end=!item $slib_wpointer of $slib_w
71
 			!if $slib_wpointer < $slib_cntw
72
 				slib_end1=!item $[$slib_wpointer+1] of $slib_w
73
 			!else 
74
				 slib_end1=$slib_end+2
75
			 !endif
76
				 slib_result=!append item $[$slib_cpt/$slib_cnt] to $slib_result
77
			!if $slib_dat>=$slib_end1
78
 				slib_cpt=0
79
				!goto point
80
			!else
81
				slib_cpt=1
82
			!endif
83
		!endif
84
	!next slib_i
85
#Le dernier intervalle
86
	slib_result=!append item $[$slib_cpt/$slib_cnt] to $slib_result
87
 
88
	!if $[$slib_wpointer+1] <=$slib_cntw
89
		slib_zero=!values 0 for x=$[$slib_wpointer+1] to $slib_cntw
90
		slib_result=$slib_result,$slib_zero
91
	!endif
92
!endif
93
slib_out=!trim $slib_result
94
slib_out=!line -1 of $slib_out
95
slib_out=[$slib_out],[$slib_w]