2013-08-02 68 views
0

我有以下數據:SAS集團通過數值或轉換爲char

data have; 
     input username $ betdate : datetime. customerCode; 
     dateOnly = datepart(betdate) ; 
     format betdate DATETIME.; 
     format dateOnly ddmmyy8.; 
     datalines; 
     player1 12NOV2008:12:04:01 1 
     player1 04NOV2008:09:03:44 10 
     player2 07NOV2008:07:03:33 1 
     player2 05NOV2008:09:00:00 0.5 
     player3 05NOV2008:09:05:00 1 
     player2 07NOV2008:14:03:33 1 
     player1 05NOV2008:09:00:05 20 
     player2 07NOV2008:16:03:33 1 
     player2 07NOV2008:18:03:33 1 
     player2 09NOV2008:10:05:10 0.7 
     player3 15NOV2008:15:05:33 10 
     player3 15NOV2008:15:05:33 1 
     player2 15NOV2008:15:05:33 0.1 
    run; 
    PROC PRINT; RUN; 

當我運行下面的,我沒有得到明顯的,對倒塌的條目customerCode當我按它,因爲它是數字,我猜。

proc sql; 
     select username, customerCode from have group by 1,2; 
    quit; 

我該怎麼做?我想獲取已分配給客戶的所有客戶代碼的歷史記錄(即他們更改時),而不是客戶代碼的每個數字值的條目。我無法將變量轉換爲char值,以便分組有效:

proc sql; 
    create table want as 
    select * from have, customerCode FORMAT $10. as code; 

quit;

感謝您的任何幫助。

+0

'create table has select as distinct username,customer code from have;'你想要什麼?或者,'proc sort data = want(keep = username customercode)'nodups out = have;通過用戶名customercode;運行;'? (應該做同樣的事情)。 – AdamO

回答

0

你沒有得到明確的條目,因爲它忽略了你的group by,因爲你沒有要求任何彙總功能。 SAS不允許group by沒有彙總功能(即,sum(something)count(something)或其他),它將其轉換爲order by。沒有明確的理由數字不適用於分組。順便說一下,在日誌中記錄了這條記錄,其中有NOTE

您可以使用distinct,因爲你在評論中建議:

proc sql; 
select distinct username, customercode from have; 
quit; 

這會給你所有的用戶名/ customercode組合的列表。

如果你想格式化它,你必須刪除$ - $ in格式並不意味着「讓它成爲一個字符」,這就是所有格式所做的;它意味着「原始值預格式是一個字符值」。

proc sql; 
    create table want as 
    select distinct username, customercode format=10. from have; 
quit; 

這將作爲預期的,因爲該格式之後施加的不同進行處理(和後小數部分仍然存在,只是引擎蓋下)不太工作。然而,你可以這樣做:

proc sql; 
    create table want as 
    select distinct username, put(customercode,10.) from have; 
quit; 

或者你可以使用ROUND或其他的東西來保持它的數值。

+0

我認爲你的問題沒有充分說明。 DISTINCT當然可以工作,並且做我期望的:給出每個唯一的用戶名/客戶代碼組合。 – Joe

+0

也許可以澄清你的想要的結果是在你的問題 - 一個「想要」數據集。和/或澄清'customerCode'的含義。 – Joe