2017-06-09 6 views
0

私は部分的にC++コードに変換する必要があるsasコードを持っていますが、その機能を理解するのには苦労しています。私はsasの経験がなく、数時間の様々なチュートリアルや例の後、私はほとんど進歩を遂げていません。私は、入力データまたはそれに対応する出力のいずれにもアクセスできません。コードは次のフォーマットに従いますが、私は、変数名を変更した:コードは、その後に続くこのSASコードブロックは何をしますか?

data data1; 
set data2; 
output; 

if type='ABCD' and zone=1 then do; 
    type='BCDE'; spec='CDE'; sub='ABCD DEF'; output; 
    type='EFGH'; spec='FGH'; output; 
    type='ABCD'; spec='DEF'; 
end; 

、しかし、私はこれだけのロジックif文を理解する必要があります。実際のコードでは、これらのステートメントの多くがありますが、それらはすべて同じ構造に従います。変数値は、型と一意性の点でのみ重要です。変数がここで値を共有する場合、元のコードでも同様です。そうでない場合は、変数が異なります。

私はこのプログラムがtype/spec/zoneの組み合わせをとり、それらを他のタイプ/仕様の組み合わせに変換するように設計されていることを知っていますが、ロジックを理解できないようです。

+1

IFステートメントはほぼすべての言語で同じです。これの唯一の違いは出力です。 OUTPUTにより、明示的なWRITEが発生します。このステップにはOUTPUTがあるので、データステップの境界を気にする必要はありません。ここで起こっているのは、レコードを複製し、各レコードごとに異なるタイプ/スペックを作成することです。そのため、IF条件を満たすレコードごとにレコードX 3にする必要があります。 – Reeza

+0

@Reeza私が正しく理解ので、もし、入力データ内のすべてのレコードに対して、それはそれは「ABCD」とゾーン1を入力している、それがレコードをコピーして、「BCDE」、「CDE」との仕様、およびサブでその型に置き換えられます見つけます'ABCD DEF'を指定してレコードを出力データに書き込みます。次の行でこれを繰り返します.3行目はどうですか?それは出力されません、同じことが起こるか? – zach

+1

私はあなたのコードのどこかに、あなたが示していない別のOUTPUTがあると思われます。 – Reeza

答えて

2

DATAおよびSETステートメントはそれぞれターゲットとソースを定義します。

最初のOUTPUT文は、ターゲットに、ソースデータから読み取られたすべてのレコードのコピーが少なくとも1つ存在することを保証します。

IF/THENステートメントのDO ENDブロック内のコードにより、実行時に2つの追加レコードが書き込まれます。代入文が示すように、TYPE、SPEC、およびSUB変数の値が異なります。 DOブロックの最後に、TYPE、SPEC、SUBの値がそれぞれ 'ABCD'、 'DEF'、および 'ABCD DEF'に設定されます。だから、

ご入力はあなたが投稿したコードの一部によって書かれた値は以下のようになり

TYPE,SPEC,SUB,ZONE 
ABCD,UNK,UNK,0 
ABCD,XX,YY,1 
UNK,UNK,UNK,0 

ある場合。

TYPE,SPEC,SUB,ZONE 
ABCD,UNK,UNK,0 
ABCD,XX,YY,1 
BCDE,CDE,ABCD DEF,1 
EFGH,FGH,ABCD DEF,1 
UNK,UNK,UNK,0 
+0

ありがとう!入力/対応出力を表示することは非常に役に立ちました。私は他のコードが同じロジックに従っていることを理解することができます。私はあなたの答えを受け入れることができるように少し質問を修正しました。 – zach

関連する問題