SASの値を置き換える -- sas フィールド 関連 問題

Replacing value in SAS












0
vote

問題

日本語

-980, -987, -995 を持つ変数がいくつかあります。

データセット

<事前> <コード> fact_1 fact_2 fact_3 fact_4 0 -980 -21 -995 12 0 -987 -214 24 12 43 -124 ...

欠損値に置き換えたいと思います。 -980, -987, -995

予想出力:

<事前> <コード> fact_1 fact_2 fact_3 fact_4 0 . -21 . 12 0 . -214 24 12 43 -124 ...

SASでそれをする方法を教えてください。私はPythonで置換を使用するでしょうが、私は実際に私は変数がSASで変更するために指定された値を持っているかどうかを確認する方法がわかりません。

英語

I have some variables having values -980, -987, -995.

Dataset

fact_1   fact_2   fact_3   fact_4   0        -980     -21      -995      12         0      -987     -214     24        12      43       -124    ... 

I would like to replace with a missing value where var has values listed above: -980, -987, -995.

Expected output:

fact_1   fact_2   fact_3   fact_4   0          .    -21         .        12         0      .        -214      24        12      43       -124    ... 

Can you please tell me how to do it in SAS? I would use replace in Python but I actually I do not know how to check if a variable has a specified value to change in SAS.

</div
  
 
 

回答リスト

1
 
vote

SASの変数の値を変更する方法は、代入文を使用することです。

<事前> <コード> x4

変数が特定の値を持つかどうかをテストする方法は、 x5 で平等をテストすることです。条件付きでステートメントを実行するには、IF / THER構造体を使用します。

<事前> <コード> -N+416

変数が値のリストのいずれかの値であるかどうかをテストする x7 演算子を使用します。

<事前> <コード> x8

これらのステートメントはデータステップで機能します。したがって、既存のデータセットに名前が付けられている場合は、データステップを実行して、値が変更された名前の新しいデータセットを作成する必要があります。

だからあなたの完全なプログラムは次のようになるかもしれません:

<事前> <コード> x9

似たような変数がたくさんある場合は、壁紙コードを作成するのではなく、アレイを使用したいと思うでしょう。

<事前> <コード> -N0
 

The way to change the value of a variable in SAS is to use an assignment statement.

fact_4 = .; 

The way to test if a variable has a specific value is to test for equality with =. To conditionally execute a statement use the IF/THEN structure.

if fact_4 = -980 then fact_4 = .; 

To test if a variable is any of a list of values use the IN operator instead.

if fact_4 in (-980 -987 -995) then fact_4 = .; 

Note that those statements work in a DATA step. So if your existing dataset is named HAVE you should run a data step to create a new dataset named WANT that has the values changed.

So your full program might look like:

data want;   set have;   if fact_1 in (-980 -987 -995) then fact_1 = .;   if fact_2 in (-980 -987 -995) then fact_2 = .;   if fact_3 in (-980 -987 -995) then fact_3 = .;   if fact_4 in (-980 -987 -995) then fact_4 = .; run; 

If you have a lot of similar variables then you probably will want to use an ARRAY rather than creating wallpaper code.

data want;   set have;   array fix3 fact_1-fact_4;   do index=1 to dim(fix3 );     if fix3[index] in (-980 -987 -995) then fix3[index]= .;   end;   drop index; run; 
</div
 
 
   
   
0
 
vote

<コード> -N1 演算子は、@TOMで表示される値のリテラルリストとアレイでも機能することができます。

例:

テストする値をループします。これは、配列されている、それぞれが配列されている値のリストを欠席に変換されるリストに合わせてテストします。

<事前> <コード> -N2
 

The IN operator can work with literal lists of values as shown by @Tom and also with arrays!

Example:

Loop over the values to be tested, which have been arrayed, testing each against the arrayed list of values to be converted to missing.

data have;   do rownum = 1 to 100;     array x x1-x100;     do _n_ = 1 to 100;       x(_n_) = rownum - 100 - _n_;     end;     output;   end; run;  data want;   array nullify (6) _temporary_ (-99, -77, -69, -96, -25, -42);    set have;    array values x1-x100;    do _n_ = 1 to dim(values);     if values(_n_) in nullify then call missing(values(_n_));   end; run; 
</div
 
 

関連する質問

1  統合なしでデータを分類しますか?  ( Categorize data without consolidating ) 
約1000列のレコードと2000列のテーブルを持っています。私がやりたいことは、 'ID'を除くすべての列の列値を除くすべてのレコードがカテゴリIDを与えられるように各行を分類することです。私の最後の答えは次のようになります: <前> ID A B C ......

0  SAS:イベントの周りの時間の回帰  ( Sas regressions of times around an event ) 
私はイベント研究に自分自身を読んでいて、発表日T0とT1 の発表前日のボラティリティ(毎日)を後退させる必要があります。 <事前> <コード> Return(t0,t+1) = Volatility(t-5 to t-1) + Controls. このよう...

0  SASで変数の値を代入する  ( Substituting the values of a variable in sas ) 
私のSASファイルの列を年齢として、もう1つの列としてファーナメントとしての列があります。 AgeFinal列の値で値を1つのID(つまり5)の値で代用したいです。 使用したコードは次のとおりです。 <事前> <コード> Data temp; set temp...

1  SASで「Jacobian Matrix」が特異になるのは何ですか?  ( What causes jacobian matrix to be singular in sas ) 
私は次のように単純なSAS(バージョン9.2)プログラムを持っています、 <事前> <コード> proc model; cdf('normal',log(V/100)+1)=0.5; bounds V>0; solve V/solveprint; run; ...

0  複数のテーブルをマージするSAS  ( Sas merging multiple tables ) 
複数のテーブルをマージする最善の方法が何であるか知りたいのですが。私はすべてのテーブルにわたって一意の識別子を持っています。テーブルを並べ替えた後、すべてのテーブルに参加する場合、または1つのテーブルマージによって段階的にする必要があります。 この問題は? ...

4  Curl Option - Insecure / -kに相当するProc HTTP  ( Proc http equivalent of curl option insecure k ) 
システムコマンドを送信し、<コード> pipe を以下のように使用して、CURLを使用してREST APIにアクセスできます。 <事前> <コード> filename fn pipe "curl -k -u &user.:&pass. 'https://bla...

1  SASマクロコード変数の作成  ( Sas macro code variable creation ) 
私のデータセットに複数のフラグを作成したい(そして多くの派生数値特性)が、コードを働くために苦労しています。 条件付きの反復ループを使用しています。解決策に関する助けや提案は大幅に感謝されます。 これは私が試したコードです。これはフラグを作成しますが、これは私...

0  それを作成したマシンにアクセスできない場合は、別の形式で作成されたSASファイルを操作する方法を説明しますか。  ( How do i work with a sas file that was created in a different format linux wind ) 
私は私のWindows 7 / SAS 9.4マシンに多数のSASデータセットを持っています: <事前> <コード> data_19921.sas7bdat data_19922.sas7bdat data_19923.sas7bdat .... data_2...

0  ループまたはマクロを使用して複数のテーブルをSASにマージします  ( Merge multiple tables in sas using loop or macro ) 
私はループ内のforecast_2013~2022のテーブルを生成してから、すべてのデータセットを1テーブルにマージしました。しかし今、私は何年もの間、翌年のループでデータセットをマージしたいと思います、来年は2023年または2024年になります...私はpr...

1  SAS Arrayステートメントが予想される変数を参照しないのはなぜですか?  ( Why doesnt my sas array statement reference the expected variables ) 
出発(出版社)の間の時間数を見つけようとしています。次の訪問(IN)がSASで発生したとき。 マイデータセット(SASデータセット)はこんな感じです。変数の変数とOUTはDateTime変数です。 <事前> <コード> ID In1 ...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有