5

R では、all() または any() 関数を使用して、列変数のすべての行にわたって条件を実行できます。SASに同等の方法はありますか?

列 x のいずれかの行が負の場合、条件が必要です。これは TRUE を返す必要があります。

または、列 y のすべての行が負の場合、TRUE が返されます。

例えば

x   y
-1  -2
2   -4
3   -4
4   -3

Rで:

  • all(x<0)出力はFALSEになります
  • all(y<0)出力TRUEを与えるでしょう

同じ列単位の操作を SAS で複製したいと考えています。

4

3 に答える 3

7

完全を期すために、SAS-IML ソリューションを次に示します。もちろん、関数anyと関数が同じ名前で存在するので、それは自明です... locを使用して正の要素を識別するall例も含めます。

data have ;
  input x y @@;
cards;
1 2 
2 4 
3 -4 
4 -3 
;
run;

proc iml;
    use have;
    read all var {"x" "y"};
    print x y;
    x_all = all(x>0);
    x_any = any(x>0);
    y_all = all(y>0);
    y_any = any(y>0);
    y_pos = y[loc(y>0)];

    print x_all x_any y_all y_any;
    print y_pos;
quit;
于 2018-03-20T16:38:16.833 に答える
6

SQL 集計関数を使用して行うのが最も簡単な可能性があるすべての観測を操作する場合。

SAS はブール式を真の場合は 1、偽の場合は 0 として評価します。したがって、観測に条件があるかどうかを調べるにMAX( condition )は、真であるかどうか (つまり、1 に等しいかどうか) をテストします。すべての観測値が真かどうかをテストする条件を満たしているかどうかを確認しMIN( condition )ます。

data have ;
  input x y @@;
cards;
-1 -2 2 -4 3 -4 4 -3 
;

proc sql ;
create table want as 
  select 
     min(x<0) as ALL_X
   , max(x<0) as ANY_X
   , min(y<0) as ALL_Y
   , max(y<0) as ANY_Y
  from have
;
quit;

結果

Obs    ALL_X    ANY_X    ALL_Y    ANY_Y
 1       0        1        1        1

于 2018-03-20T03:23:50.050 に答える