2017-10-30 8 views
0

私は、Rで行う方法を知っていることと同等のやり方を見つける手助けを依頼することを書いていましたが、ソフトウェアの制限のためにSASで行う必要があります。SAS:流行と豊富によるローのフィルタリング

私は列と機能(私の場合は細菌の名前)の一意のサンプルを行内に持っています。いくつか指摘してきたように、私はこれがまれなデータ構造であることを知っています。

私は、このケースでは、私の品質管理のフィルタリング基準を満たしていない私のテーブルから任意の機能を排除したいと、少なくとも0.01%のセル値とサンプルの少なくとも10%で見つけます:

Rでこれを行うには

は以下のようになります。

豊富/有病率フィルタ

spp.filt <- spp.dat[ apply(spp.dat, 1, function(bug) sum(bug >= 0.01) >= 0.1*ncol(spp.dat)), ] 

誰もこれがSASで行うことができますどのように任意のアイデアを持っていますか?

「フィルタの蔓延」または「フィルタの豊富さ」に関連する結果は見つかりませんでしたが、何か助けていただければ幸いです。

他の人が示唆したように、ここでのデータは次のようになります。あなたがSASでこれを行うだろう方法は、「さまざまな数字にあなたを計算するためにお好みのPROCを使用するように簡単になり

  sample 1 sample 2 sample 3 
feature a 0  0   0.1 
feature b 0  0.2   0 
feature c 0  0   0 
feature d 0.4  0   0.5 
+0

コード/サンプルデータを含めるための答えと提案に加えて、データ構造の変更について考慮する必要があります。 SASはマトリックス言語ではないため、データ構造が自分の行っていることに対して適切でない可能性があります。 SASはリレーショナルデータベースに似ていますが、実際にはSQLデータベースと見なすことができ、ほとんどの分野で間違ってはいけません。特定の場所(特に統計上)ではより強力ですが、最適化されていません。ですから、あなたの行/列の配置は、あなたがやっていることに正確に応じて、SASのための良いものではないかもしれません。 – Joe

+0

通常、行のサンプルとその列のサンプルの特性があります。逆のように見えます。これはあなたにとって役に立つと分かるかもしれませんが、このように構造化されていると痛みが増すでしょう。私はあなたの将来に 'PROC TRANSPOSE'を見ます。 – Joe

+0

サンプルデータは、あなたの問題を説明するのに役立ちます。典型的には、行を識別する1つの変数、列を識別する1つの変数、および実際の測定のための1つの変数を有することによって、行列をデータセットに格納することができる。あなたはSampleIDとBacteriaを持っていると言いましたが、実際の測定値は何ですか? – Tom

答えて

0

あなたはそれをメインのデータセットとフィルタで結合することができます。

あなたが14歳以上だったクラスの人々のリストを望んでいたのであれば、たとえば、あなたはこのような何かしたい:

proc sql; 
    select name into :14oroverlist separated by ' ' 
    from sashelp.class where age ge 14 ; 
quit; 

data class; 
    set sashelp.class; 
    where name in (&14oroverlist.); 
run; 

これを行うには他の方法の束がありますあなたのプログラム/データ/スタイル/プリファレンスの詳細にちょうど依存するあなた自身の関数をローリングすることを含みます。サンプルデータと必要な出力を含めると、より有用なものが得られるかもしれません。

+0

ありがとうジョー。編集したレスポンスにサンプルデータを含めようとしました。所望の出力については、元のテーブルは多くのフィーチャ/行(> 70,000)を有するが、豊富ではなく、それほど普及していないフィーチャを除去した後、所望の出力は大幅に少なくなる。皆さん、お世話になりました。 – Long

関連する問題