Сводная сумма PROC возвращает 1 выше, чем следует - PullRequest
0 голосов
/ 29 апреля 2019

Таким образом, я запускаю PROC SUMMARY с SUM для частоты чего-либо, и у меня есть только 160 наблюдений, однако я сталкиваюсь с проблемой, что сумма частот равна 161. Я дважды проверил исходный набор данных, что есть 160 наблюдения и все, кроме чего-то делает частоту 161, и я не уверен, что.

Я пробовал код

PROC SQL;
    CREATE TABLE DiseaseFreq AS
    SELECT Concomitant_Disease,
            count(*) AS Freq
    FROM CAS.PreOp
    GROUP BY Concomitant_Disease;
QUIT;

DATA Disease (KEEP=var freq RENAME=var=Concomitant_Disease);
    SET DiseaseFreq;
    LENGTH var $25. freq 3.;
    DO i=1 BY 1 WHILE(SCAN(Concomitant_Disease,i,"~^,")^='');
        var=STRIP(PROPCASE(SCAN(Concomitant_Disease,i,"~^,")));
        Freq=Freq;
        OUTPUT;
    END;
RUN;

PROC SUMMARY DATA=Disease;
    CLASS Concomitant_Disease;
    VAR Freq;
    OUTPUT OUT=Count SUM=Freq;
RUN;

Ответы [ 2 ]

1 голос
/ 01 мая 2019

Вам нужна опция NWAY в выражении PROC SUMMARY.

1 голос
/ 29 апреля 2019

Почему вы усекаете точность вашей переменной FREQ? Вы сказали SAS оставить только три байта из восьми байтов, необходимых для хранения числа с плавающей запятой. В Windows / Linux этого количества достаточно, чтобы точно представлять числа размером до 8 192. Отбрасывание битов младших разрядов является наиболее вероятной причиной, по которой ваши подсчеты выключены.

Установите ДЛИНУ для ЧАСТОТЫ на 8. Или просто оставьте это в покое, и SAS сохранит все 8 байтов по умолчанию.

enter image description here

...