1

次のデータがあります。

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;

これどうやってするの?customerCode の各数値のエントリではなく、顧客に割り当てられたすべての顧客コードの履歴を取得したいと考えています (つまり、変更されたときなど)。グループ化が機能するように、変数を char 値に変換できませんでした。

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

終了する;

これについて助けてくれてありがとう。

4

1 に答える 1

0

group by集計関数を要求しなかったため、を無視しているため、個別のエントリを取得していません。group bySAS では、集計関数 (つまり、sum(something)またはcount(something)その他)なしでは許可されませんorder by。グループ化に数値が機能しない明確な理由はありません。

ちなみに、これはログに , で示されていますNOTE

distinctコメントで提案したように、を使用できます。

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

これにより、すべてのユーザー名/顧客コードの組み合わせのリストが表示されます。

書式を設定したい場合は、$ を削除する必要があります。書式中の $ は、「これを文字にする」という意味ではありません。これは、すべての書式が行うことです。「元の値の事前フォーマットは文字値でした」ことを意味します。

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 などを使用して数値を維持することもできます。

于 2013-08-02T16:14:39.503 に答える