データサイエンティスト協会から2020年6月15日からGitHubで公開してるデータサイエンス100本ノック(構造化データ加工編)ですが
その100本をSASで書いたので,私のブログでレビューしてくださいという,非常に面白い連絡を某Mさんからいただきました
なので,気の向くままに適当にとりあげれればと
005:
【行に対する操作 / 複数条件 / 複数条件に合致する行を抽出する】
レシート明細のテーブル(df_receipt)から売上日(sales_ymd)、顧客ID(customer_id)、商品コード(product_cd)、売上金額(amount)の順に列を指定し、以下の条件を満たすデータを抽出せよ。
顧客ID(customer_id)が"CS018205000001"
売上金額(amount)が1,000以上
/*Mさま*/
data s005; format sales_ymd customer_id product_cd amount ; keep sales_ymd customer_id product_cd amount ; set df_receipt; where customer_id = 'CS018205000001' & 1000 <= amount; run; proc print data = s005; run;
好みの問題で
私は割と
&(and)でwhere抽出条件をつなぐのが好きではなく
where customer_id = 'CS018205000001';
where same 1000 <= amount;
としかかかないかなぁ.コメントアウトして条件絞りを変えやすいし
007問題の
- 顧客ID(customer_id)が"CS018205000001"
- 売上金額(amount)が1,000以上2,000以下
整数値が前提なら amout in (1000:2000);の方が書きがちですが正しいのはbetweenの気がします
013問題の
顧客テーブル(df_customer)から、ステータスコード(status_cd)の先頭がアルファベットのA~Fで始まるデータを全項目抽出し、10件だけ表示せよ。
where substr(status_cd , 1 , 1) between 'A' and 'F'; ↓
where first(status_cd , 1) between 'A' and 'F';
first関数とchark関数が好きで,substrの第三引数が1になるようなケースで私はsubstr使わないかなぁ
末尾ならreverseしてからfirstするかcharで第二引数にlengthいれるかなぁ
とりあえず,ここまで