0

「name」という文字変数を持つデータセットがあります。「ファーストネーム ミドルネーム ラストネーム」のような人物のフルネームが含まれています。

「姓、名、ミドルネーム」になるようにデータを再配置したいと思います。

私は SAS 関数にそれほど熱心ではありませんが、私が知っている数少ない関数のいくつかを使用しました。

(私のコードは以下に見ることができます)。

最初の試行 (test2) では、必要な結果が得られません。「lastName、firstName middleName」ではなく、「lastName、firstName middleName」が表示されます。問題はコンマです。

そこで、最後にコンマを含む af new last name 変数を作成することで問題を解決できると考えました (test2_new 内)。しかし、私は欲しいものを手に入れませんか?SAS は末尾に 3 つのドットを付けましたが、コンマではありませんか?

私よりも SAS のスキルが高い人が私の質問に答えてくれるといいのですが??

敬具マリア ここに画像の説明を入力

4

2 に答える 2

2

ここでは、PERL 式、特に PRXCHANGE が便利なツールです。SAS サポート Web サイトには、姓と名を逆にする方法の良い例が示されています。これは、そのコードをわずかに変更したものです。私は 2 つまたは 3 つの名前を持つ人だけを対象にしていますが、必要に応じてこれを拡張するのはかなり簡単なはずです。私のコードは、@Chris J からの回答で作成された HAVE データセットに基づいています。

data want;
set have;
if countw(text)=2 then text = prxchange('s/(\w+) (\w+)/$2, $1/', -1, text);
else if countw(text)=3 then text = prxchange('s/(\w+) (\w+) (\w+)/$3, $1 $2/', -1, text);
run;
于 2014-06-20T14:53:46.877 に答える
2
データがあります。
  @1 テキスト & $64 を入力してください。;
データライン;
スーザン・スミス
デビッド・ジェイムソン
ブルース・トーマス・フォーサイス
;
走る ;

データが欲しい。
  セットがあります。
  姓 = スキャン (テキスト、-1、' ') ;
  firstnames = substr(テキスト,1,長さ(テキスト)-長さ(姓));
  newname = catx(', ',lastname,firstnames) ;
走る ;

どちらが与える

テキスト 姓 名 新名

スーザン スミス スミス スーザン スミス、スーザン
デビッド A ジェイムソン ジェイムソン デビッド A ジェイムソン、デビッド A
ブルース・トーマス・フォーサイス フォーサイス ブルース・トーマス・フォーサイス, ブルース・トーマス
于 2014-06-20T13:25:59.327 に答える