2016-04-08 11 views
0

次のコマンドをより効率的に書き直す方法を教えてください。基本的には、ある条件が満たされていれば、複数の操作を実行したい。SASを使用して複数の操作を効率的に実行する方法

data a; 
set a; 
if var1 > 5 then var2 = 5; 
if var1 > 5 then var3 = 5; 
if var1 > 5 then var4 = var1; 
run; 

私は次のように書き直すことができます。しかし、これを行うための効率的なやり方がありますか?

Data a; 
set a; 
if var> 5 then do; 
var2 = 5; var3= 5; var4 = var1; 
end; 
run; 
+0

効率的であることを具体的に説明してください。あなたの第2の解決策はすでにかなり効率的です。 – Jetzler

+0

do endを使うと、プログラムは少し長くなり、やや乱雑に見えます。ですから私はそれらの複数のコマンドを1つの文で書くことができると思いますか? – fly36

+0

繰り返し使用する関数またはマクロを生成することができます。それ以外はdoグループの圧縮バージョンは表示されません。 – Jetzler

答えて

0

それは任意の測定可能なパフォーマンスの違いを作った場合、私は驚かれることでしょうが、あなたは唯一の条件付きコードの一つのブロックを持っているとあなたが本当に多く、あなたがdo-endブロックの代わりにreturnを使用することができることをセミコロンを嫌い場合:

Data a; 
set a; 
if var <= 5 then return; 
var2 = 5; var3= 5; var4 = var1; 
run; 

SASはreturn声明に達したとき(あなたがどこかに明示的outputステートメントを使用していない限り...)、それはデータステップ、そこにして、出力の現在の反復のためのあなたのロジックの残りの部分をスキップし、 (この単純なシナリオでは)次のデータステップ。

しかし、このアプローチは通常gotoと同レベルであり、いかなる状況下でも使用しないでください。

関連する問題