SAS コードを R に変換する方法をまだ学習中で、警告が表示されます。どこで間違いを犯しているのかを理解する必要があります。私がやりたいことは、母集団の 3 つのステータス (本土、海外、外国人) を要約して区別する変数を作成することです。私は2つの変数を持つデータベースを持っています:
- id 国籍:
idnat
(フランス人, 外国人),
idnat
がフランス語の場合:
- id 出身地:
idbp
(本土、植民地、海外)
と呼ばれる新しい変数からの情報idnat
とそこへの情報を要約したいと思います。idbp
idnat2
- ステータス: k (本土、海外、外国人)
これらの変数はすべて「文字タイプ」を使用します。
列 idnat2 で期待される結果:
idnat idbp idnat2
1 french mainland mainland
2 french colony overseas
3 french overseas overseas
4 foreign foreign foreign
Rで翻訳したいSASコードは次のとおりです。
if idnat = "french" then do;
if idbp in ("overseas","colony") then idnat2 = "overseas";
else idnat2 = "mainland";
end;
else idnat2 = "foreigner";
run;
Rでの私の試みは次のとおりです。
if(idnat=="french"){
idnat2 <- "mainland"
} else if(idbp=="overseas"|idbp=="colony"){
idnat2 <- "overseas"
} else {
idnat2 <- "foreigner"
}
次の警告が表示されます。
Warning message:
In if (idnat=="french") { :
the condition has length > 1 and only the first element will be used
簡単にするために、代わりに「ネストされた」を使用するようにアドバイスされifelse
ましたが、より多くの警告が表示されます。
idnat2 <- ifelse (idnat=="french", "mainland",
ifelse (idbp=="overseas"|idbp=="colony", "overseas")
)
else (idnat2 <- "foreigner")
警告メッセージによると、長さが 1 よりも大きいため、最初の括弧の間だけが考慮されます。申し訳ありませんが、この長さとここでの関係がわかりませんか? 私が間違っている場所を知っている人はいますか?