PL/SQL Code with SELECT stats (8th Response) – Toolbox for IT Groups
This seems to work. Hope it helps. –Chuck
DECLARE
max_abc NUMBER;
min_abc NUMBER;
CURSOR cur_crosstab
IS
WITH
att_grp AS
(
SELECT
rueckzah,
lev AS lev,
age,
CASE
WHEN age <= lev
THEN 1
ELSE 2
END attribute_group
FROM
credit,
(
SELECT
level AS lev
FROM
dual
WHERE
level >= min_abc CONNECT BY level <= max_abc
)
)
SELECT
lev,
ROUND(STATS_CROSSTAB(rueckzah,attribute_group,’CHIS Q_OBS’ ),4) AS
chi_square,
ROUND(STATS_CROSSTAB(rueckzah,attribute_group,’CHIS Q_SIG’ ),4) AS
significance ,
dense_rank() over (order by ROUND(STATS_CROSSTAB(rueckzah,attribute_group,
‘CHISQ_OBS’ ),4)) AS rank1,
dense_rank() over (order by ROUND(STATS_CROSSTAB(rueckzah,attribute_group,
‘CHISQ_OBS’ ),4) DESC) AS rank2
FROM
att_grp
GROUP BY
lev
ORDER BY
lev;
BEGIN
SELECT MAX(age) INTO max_abc FROM credit;
SELECT MIN(age) INTO min_abc FROM credit;
FOR i IN cur_crosstab
LOOP
IF i.rank2 = 1 THEN
DBMS_OUTPUT.put_line(i.lev || ‘=’ || TO_CHAR(i.chi_square,’99.99′) ||
TO_CHAR(i.significance,’99.99′));
END IF;
IF i.rank1 = 1 THEN
DBMS_OUTPUT.put_line(i.lev || ‘=’ || TO_CHAR(i.chi_square,’99.99′) || TO_CHAR
(i.significance,’99.99′));
END IF;
END
LOOP;
END
;


Leave a Reply