3

値が欠落していない列の日付の出現をカウントしたい。したがって、たとえば、サービスの日付がない場合に null 値を含めるのではなく、車がサービスされた回数をカウントしたいと考えています。

単純なカウント機能を試しましたが、すべてのレコードが表示されます。「ケース」を使用することを考えましたが、構文についてはわかりません。SAS Enterprise Guide を使用しています。

サンプル日付

id    car     service_Date
1     honda   01/01/2005
2     honda   01/01/2006
3     honda   
4     honda   01/01/2008
5     honda   
6     honda   01/01/2010

結果: 答えとして 4 つだけが必要なので、null 値はカウントされません。

PROC SQL;
CREATE TABLE WORK.QUERY_FOR_CARS AS 
SELECT 
t1.CAR,
t1.ID  
/* SERVICE_DATE */
(count (case when t1.S_DATE is not null then 0 end)) AS SERVICE_DATE
FROM WORK.QUERY_FOR_CAR_SERVICE
GROUP BY t1.S_DATE;
QUIT;

私が使用しているコードを追加しました。日付の数が表示されますが、日付の値が null である場所も含まれます。

4

6 に答える 6

7

例の変数を含むCARSという名前のSASデータセットを考えると、SQLでservice_dateの値が欠落していない観測値の数を2つの異なる方法で見つけることができます。

proc sql;

   select count(service_date) as num_not_missing
   from cars;

   select count(*) as num_not_missing
   from cars
   where service_date is not null;

quit;

最初の例では、count関数でservice_date変数を指定します。これにより、欠落している値が無視されます。where2番目は、句を適用した後、すべての行をカウントします。どちらも同じように機能します。

于 2013-01-21T21:52:08.137 に答える
4

MS Sql Serverの2つのオプション:

SELECT COUNT([service_Date]) FROM [table1]

また

SELECT COUNT(*) FROM [table1] WHERE [service_Date] IS NOT NULL

詳細については、 MSDNCOUNT()を参照してください。

于 2013-01-21T20:51:36.747 に答える
3

デフォルトでは、すべての行をカウントするcount(*)とは対照的に、count(service_date)はnull値を除外します。

于 2013-01-21T20:50:54.990 に答える
0

あなたは試すことができます、WHERE column != ""またはあなたがNULLを持っていないなら多分あなたは使うことができますWHERE CHAR_LENGTH(column) > 3

于 2013-01-21T20:51:54.683 に答える
0

ラマック、

これを行うにはいくつかの方法があります。これが私が使用する方法で、PROCSQLを避けています。

/* Set up example data */    
data   YourTable;
input id car $ service_Date;
informat service_Date mmddyy10.;
format service_Date mmddyy10.;
cards;

1 honda 01-01-2005
2 honda 01-01-2006
3 honda ""
4 honda 01-01-2008
5 honda ""
6 honda 01-01-2010

run;

/* Count non null records */
data work.CountTable(keep=NbrNulls);
 set work.YourTable(where=(service_date ne .)) end=last;
 if last;
 NbrNulls=_N_;
run;

そのカウントをどのように使用するかに応じて、最後のデータステップの最後に「callsymputx()」関数を追加して、他の場所でマクロ変数として呼び出すことができます。

結果は4です。

于 2013-01-21T21:32:43.080 に答える
0

別の Proc (Proc Means)からの可能性がある場合

data have;
 input car $ service_date mmddyy10.;
 format service_date mmddyy10.;
datalines;
honda 01/01/2005
honda 01/01/2006
honda
honda 01/01/2008
honda
honda 01/01/2010
toyota 01/01/2005
toyota 01/01/2006
toyota
toyota 01/01/2008
toyota
toyota 01/01/2010
;

Proc Means N data=work.have noprint; 
 var service_date;
 by car;
 output out=work.want(drop= _type_ _freq_)  n=count;
run;
于 2013-01-21T23:24:47.577 に答える