2015-12-02 4 views
0

Я пытаюсь суммировать мои набора данных с помощью ргос SQL, но я повторил значения на выходе, простая версия моего кода:Используя группу, в Proc SQL для SAS

PROC SQL; 
CREATE TABLE perm.rx_4 AS 
SELECT patid,ndc,fill_mon, 
COUNT(dea) AS n_dea, 
sum(DEDUCT) AS tot_DEDUCT 
FROM perm.rx 
GROUP BY patid,ndc,fill_mon; 
QUIT; 

Некоторые образцы выход:

Obs     Patid Ndc   FILL_mon n_dea DEDUCT 

3815   33003605204 00054465029 2000-05  2   0 
3816   33003605204 00054465029 2000-05  2   0 
12257   33004361450 00406035701 2000-06  2   0 
16564   33004744098 00603128458 2000-05  2   0 
16565   33004744098 00603128458 2000-05  2   0 
16566   33004744098 00603128458 2000-06  2   0 
16567   33004744098 00603128458 2000-06  2   0 
46380   33008165116 00406035705 2000-06  2   0 
85179   33013674758 00406035801 2000-05  2   0 
89248   33014228307 00054465029 2000-05  2   0 
107514   33016949900 00406035805 2000-06  2   0 
135047   33056226897 63481062370 2000-05  2   0 
213691   33065594501 00472141916 2000-05  2   0 
215192   33065657835 63481062370 2000-06  2   0 
242848   33066899581 60432024516 2000-06  2   0 

Как вы можете видеть, повторяются статические, например, 3815,3816. Я видел, что у некоторых людей была схожая проблема, но ответы не сработали для меня.

Содержание набора данных заключается в следующем:

      The SAS System        5 
              17:01 Thursday, December 3, 2015 

         The CONTENTS Procedure 

        Engine/Host Dependent Information 

    Data Set Page Size   65536       
    Number of Data Set Pages 210        
    First Data Page    1        
    Max Obs per Page   1360        
    Obs in First Data Page  1310        
    Number of Data Set Repairs 0        
    Filename     /home/zahram/optum/rx_4.sas7bdat 
    Release Created    9.0401M2       
    Host Created    Linux       
    Inode Number    424673574      
    Access Permission   rw-r-----      
    Owner Name     zahram       
    File Size (bytes)   13828096       


          The SAS System        6 
              17:01 Thursday, December 3, 2015 

         The CONTENTS Procedure 

       Alphabetic List of Variables and Attributes 

    # Variable  Type Len Format Informat Label 

    3 FILL_mon  Num  8 YYMMD.    Fill month 
    2 Ndc   Char  11 $11.  $20.  Ndc  
    1 Patid   Num  8 19.     Patid  
    4 n_dea   Num  8          
    5 tot_DEDUCT Num  8          


          Sort Information 

        Sortedby  Patid Ndc FILL_mon 
        Validated  YES    
        Character Set ASCII    


          The SAS System        7 
              17:01 Thursday, December 3, 2015 

         The CONTENTS Procedure 

          Sort Information 

        Sort Option NODUPKEY   

Примечание: ПРОЦЕДУРА СОДЕРЖАНИЕ, используемые (Общее время процесса): в реальном времени 0.08 секунд процессора 0,01 секунды

+1

Что произойдет, если вы удалите 'DISTINCT' из предложения SELECT? – DomPazz

+1

Дважды проверьте, что ваш код действительно выполняется (т. Е. У вас нет открытой таблицы в фоновом режиме). В то время как предложение 'distinct' не имеет места, чтобы быть там, оно не должно влиять на результат. –

+0

Вы получаете предупреждения или заметки о повторном объединении? – Joe

ответ

1

Я предполагаю, что вы имеют формат для переменной, скорее всего, дату. Proc SQL не агрегирует по форматированным значениям, но будет использовать базовые значения, но все равно отображает их как отформатированные, поэтому они отображаются как дубликаты. Это подтверждает ваше содержимое proc. Вы можете обойти это, превратив эту переменную в символьную переменную.

PROC SQL; 
CREATE TABLE perm.rx_4 AS 
SELECT patid,ndc, put(fill_mon, yymmd.) as fill_month, 
COUNT(dea) AS n_dea, 
sum(DEDUCT) AS tot_DEDUCT 
FROM perm.rx 
GROUP BY patid,ndc, calculated fill_month; 
QUIT;