Advertisement
Guest User

Untitled

a guest
Feb 23rd, 2020
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.67 KB | None | 0 0
  1. /* PSTAT 130 Homework Winter 2020*/
  2. /* By: */
  3. /* Priscilla Lee */
  4. /* Nivi Lakshminarayanan */
  5. /* Deni Stoyanova */
  6.  
  7. /* TASK 1: COMPUTATION OF FUTURE COSTS */
  8. /* Instructions 1-11: */
  9.  
  10. /* 1 */
  11. libname data "/folders/myfolders/Project/Database";
  12. /* proc contents data=data.ptf; run; */
  13.  
  14. data work.ptf;
  15. set data.ptf;
  16. length age $8 default=8;
  17. today = DATE();
  18. days = today - birthdate;
  19. agenum = floor(days/365);
  20. if (agenum LE 21) then age = "-21";
  21. if (agenum GT 21) and (agenum LE 35) then age = "21-35";
  22. if (agenum GT 35) and (agenum LE 60) then age = "35-60";
  23. if (agenum GT 60) then age = "+60";
  24. drop days today agenum;
  25. run;
  26.  
  27. /* 2 */
  28. proc import datafile="/folders/myfolders/Project/Database/cars.csv"
  29. out=work.cars
  30. dbms=CSV replace;
  31. getnames=yes;
  32. datarow=2;
  33. run;
  34.  
  35. data work.cars;
  36. set work.cars;
  37. informat hp:$15.;
  38. length hp $10;
  39. if (horsepower LE 150) then hp = "low";
  40. if (horsepower GT 150) and (horsepower LE 300) then hp = "medium";
  41. if (horsepower GT 300) then hp = "high";
  42. run;
  43.  
  44.  
  45.  
  46. proc sort data=work.ptf;
  47. by cars_id;
  48. run;
  49. proc sort data=work.cars;
  50. by cars_id;
  51. run;
  52.  
  53. data work.ptf;
  54. merge work.cars work.ptf;
  55. by cars_id;
  56. run;
  57.  
  58. /* proc print data=ptf (obs=10); */
  59. /* run; */
  60.  
  61. /* proc print data=ptf (obs=10); */
  62. /* run; */
  63.  
  64. /* 3 */
  65. proc import datafile="/folders/myfolders/Project/Database/CA_ZIP_CODE.txt"
  66. out=work.CA_ZIP_CODE
  67. dbms=dlm replace;
  68. getnames=yes;
  69. run;
  70.  
  71. /* proc print data=CA_ZIP_CODE (obs=10); */
  72. /* run; */
  73.  
  74. data work.CA_ZIP_CODE;
  75. set work.CA_ZIP_CODE;
  76. informat density:$15.;
  77. length density $10;
  78. if (population LE 4000) then density = "low";
  79. if (population GT 4000) and (population LE 30000) then density = "medium";
  80. if (population GT 30000) then density = "high";
  81. run;
  82.  
  83. proc sort data=work.ptf;
  84. by zip_code;
  85. run;
  86.  
  87. proc sort data=work.CA_ZIP_CODE;
  88. by zip_code;
  89. run;
  90.  
  91. data work.ptf;
  92. merge work.CA_ZIP_CODE work.ptf;
  93. by zip_code;
  94. run;
  95. /* density hp and age r importante :) */
  96. /* density hp and age r importante :) */
  97.  
  98. /* 4 */
  99. data data.claims;
  100. set data.claims;
  101. run;
  102.  
  103. proc sort data=work.ptf;
  104. by POLICYHOLDER_ID POLICY_STARTING_DATE;
  105. run;
  106.  
  107. proc sort data=data.claims;
  108. by POLICYHOLDER_ID POLICY_STARTING_DATE;
  109. run;
  110.  
  111. data work.claims;
  112. merge data.claims (IN=A) work.ptf (IN=B);
  113. by POLICYHOLDER_ID POLICY_STARTING_DATE;
  114. IF A;
  115. run;
  116.  
  117.  
  118. /* 5 */
  119. data work.claims;
  120. set work.claims;
  121. informat year 4.;
  122. year=year(policy_starting_date);
  123. run;
  124.  
  125. proc sort data=work.claims;
  126. by year;
  127. run;
  128.  
  129. proc means data=work.claims noprint nway;
  130. var CLAIMS_COST;
  131. class year age hp density;
  132. output out=work.claims_summary (drop = _TYPE_ _FREQ_)
  133. mean(claims_cost) = cost
  134. N(claims_cost) = nb_claims;
  135.  
  136.  
  137. /* 6 USE SUM?*/
  138. data work.ptf;
  139. set work.ptf;
  140. format year 4.;
  141. year=year(policy_starting_date);
  142. run;
  143.  
  144. proc sort data=work.ptf;
  145. by year;
  146. run;
  147.  
  148. proc means data=work.ptf noprint nway;
  149. var policyholder_id;
  150. class year age hp density;
  151. output out=work.ptf_summary (drop = _TYPE_ _FREQ_)
  152. N(policyholder_id) = nb;
  153. run;
  154.  
  155. /* 7 */
  156. proc sort data=work.claims_summary;
  157. by age density hp year;
  158. run;
  159.  
  160. proc sort data=work.ptf_summary;
  161. by age density hp year;
  162. run;
  163.  
  164. data work.summary; /* in=a use */
  165. merge work.claims_summary work.ptf_summary;
  166. by age density hp year;
  167. run;
  168.  
  169. data work.summary;
  170. set work.summary;
  171. informat freq:6.3;
  172. freq=nb_claims/nb;
  173. run;
  174.  
  175. /* 8 */
  176. proc sort data=work.summary;
  177. by descending freq age hp density;
  178. run;
  179.  
  180. proc sort data=work.summary out=work.freq nodupkey;
  181. by age hp density;
  182. run;
  183.  
  184. proc sort data=work.freq;
  185. by year age hp density;
  186. run;
  187.  
  188. proc print data=work.freq;
  189. run;
  190.  
  191. data work.freq;
  192. set work.freq;
  193. keep age hp density freq;
  194. run;
  195.  
  196.  
  197. /* 9 */
  198. proc sort data=work.summary;
  199. by descending cost age hp density;
  200.  
  201. proc sort data=work.summary out=work.cost nodupkey;
  202. by age hp density;
  203. run;
  204.  
  205. proc sort data=work.cost;
  206. by year age hp density;
  207. run;
  208.  
  209.  
  210. /* 10 */
  211. proc sort data=work.cost;
  212. by age density hp;
  213. run;
  214.  
  215. proc sort data=work.freq;
  216. by age density hp;
  217. run;
  218.  
  219. data work.pp;
  220. merge work.cost work.freq;
  221. by age density hp;
  222. run;
  223.  
  224. data work.pp;
  225. set work.pp;
  226. informat pp:15.9;
  227. pp=freq*cost;
  228. run;
  229.  
  230. proc print data=work.pp; run; /*this is 36 observations*/
  231.  
  232. /* 11 */
  233. data work.pp;
  234. set work.pp;
  235. informat lp: 15.9;
  236. lp = pp*(1+0.05);
  237. run;
  238.  
  239. /* TASK 2: DEFINITION OF THE BEST INSURANCE PRICE STRATEGY */
  240. /* Instructions 12-19 */
  241.  
  242. /* 12 */
  243. data work.price;
  244. set work.pp;
  245. keep age density hp lp;
  246. run;
  247.  
  248. data work.price;
  249. set work.price;
  250. informat pA: 15.9 pB:15.9 pC:15.9;
  251. pA = lp*(1+0.05);
  252. pB = lp*(1+0.10);
  253. pC = lp*(1+0.15);
  254. run;
  255.  
  256.  
  257. /* 13 */
  258. PROC IMPORT OUT=work.prospect
  259. DATAFILE = "/folders/myfolders/Project/Database/Prospect.csv"
  260. DBMS=CSV
  261. REPLACE;
  262. GETNAMES=YES ;
  263. DATAROW=2;
  264. delimiter=",";
  265. RUN;
  266.  
  267. data work.prospect;
  268. set work.prospect;
  269. length age $8 default=8;
  270. today = DATE();
  271. days = today - birthdate;
  272. agenum = floor(days/365);
  273. if (agenum LE 21) then age = "-21";
  274. if (agenum GT 21) and (agenum LE 35) then age = "21-35";
  275. if (agenum GT 35) and (agenum LE 60) then age = "35-60";
  276. if (agenum GT 60) then age = "+60";
  277. drop days today agenum;
  278. run;
  279.  
  280. proc sort data=work.prospect;
  281. by cars_id;
  282. run;
  283.  
  284. proc sort data=work.cars;
  285. by cars_id;
  286. run;
  287.  
  288. data work.prospect;
  289. merge work.cars work.prospect;
  290. by cars_id;
  291. run;
  292.  
  293. proc print data=work.prospect (obs=50); run;
  294.  
  295. proc sort data=work.prospect;
  296. by zip_code;
  297. run;
  298.  
  299. proc sort data=work.CA_ZIP_CODE;
  300. by zip_code;
  301. run;
  302.  
  303. data work.prospect;
  304. merge work.CA_ZIP_CODE work.prospect;
  305. by zip_code;
  306. run;
  307.  
  308. /* 14 */
  309. proc sort data=work.prospect;
  310. by age density hp;
  311. run;
  312.  
  313. proc sort data=work.price;
  314. by age density hp;
  315. run;
  316.  
  317. data work.prospect;
  318. merge work.prospect work.price;
  319. by age density hp;
  320. run;
  321.  
  322. /* 15 */
  323. data work.prospect;
  324. set work.prospect;
  325. informat prob_a:15.9 prob_b:15.9 prob_c:15.9;
  326. prob_a = 1/(1+exp((-0.1*(lp/pA))+(0.002*(pA-lp))));
  327. prob_b = 1/(1+exp((-0.1*(lp/pB))+(0.002*(pB-lp))));
  328. prob_c = 1/(1+exp((-0.1*(lp/pC))+(0.002*(pC-lp))));
  329. run;
  330.  
  331.  
  332. /* 16 */
  333. data work.prospect;
  334. set work.prospect;
  335. informat accept_a:15.9 accept_b:15.9 accept_c:15.9;
  336. if prob_A GT 0.5 then accept_a=1;
  337. else accept_a=0;
  338. if prob_B GT 0.5 then accept_b=1;
  339. else accept_b=0;
  340. if prob_C GT 0.5 then accept_c=1;
  341. else accept_c=0;
  342. run;
  343.  
  344. proc print data=work.prospect (obs=100); run;
  345.  
  346. /* 17 */
  347. proc means data=work.prospect noprint nway;
  348. var accept_a accept_b accept_c;
  349. output out=work.table_volume (drop = _TYPE_ _FREQ_)
  350. sum(accept_a) = A
  351. sum(accept_b) = B
  352. sum(accept_c) = C;
  353. run;
  354.  
  355. proc print data=work.table_volume (obs=100); run;
  356.  
  357. /* 18 */
  358. data work.prospect;
  359. set work.prospect;
  360. informat pi_a:15.9 pi_b:15.9 pi_c:15.9;
  361. pi_a = (pA-lp)*accept_a;
  362. pi_b = (pA-lp)*accept_b;
  363. pi_c = (pA-lp)*accept_c;
  364. run;
  365.  
  366.  
  367. /* 19 */
  368. proc means data=work.prospect noprint;
  369. var pi_a pi_b pi_c;
  370. output out=work.table_profit (drop = _TYPE_ _FREQ_)
  371. sum(pi_a) = profit_A
  372. sum(pi_b) = profit_B
  373. sum(pi_c) = profit_C;
  374. run;
  375.  
  376. /* TASK 3: CREATE A REPORT */
  377. /* Instructions 20-29 */
  378.  
  379. options nodate pdfpageview=fitpage;
  380. ods noproctitle;
  381. ods pdf style=journal file="/folders/myfolders/Project/Databse/final_report_lakshminarayanan_lee_stoyanova.pdf"
  382. startpage=no;
  383.  
  384. title1 "Homework Project PSTAT 130";
  385. title2 "Nivi Lakshminarayanan, Priscilla Lee, Deni Stoyanova";
  386. title3 "nlakshminarayanan@ucsb.edu, priscilla_lee@ucsb.edu, denitza@ucsb.edu";
  387.  
  388. ods layout gridded;
  389.  
  390. /* BEGIN SAS CODE */
  391. /* 21 */
  392. proc sort data=work.ptf;
  393. by age hp density;
  394. run;
  395.  
  396. proc sort data=work.pp;
  397. by age hp density;
  398. run;
  399.  
  400. data work.ptf_pp ;
  401. merge work.ptf work.pp;
  402. by age hp density;
  403. run;
  404.  
  405. data work.ptf_pp;
  406. set work.ptf_pp;
  407. where year=2019;
  408. run;
  409.  
  410. proc print data=work.ptf_pp (obs=100); run;
  411.  
  412. /* 22 */
  413. title "Average Frequency by Age";
  414. proc means data=work.ptf_pp mean nonobs;
  415. var freq;
  416. class age;
  417. output out=work.average_claims_freq1 (drop= FREQ TYPE);
  418. types age;
  419. run;
  420.  
  421. title "Average Frequency by Density";
  422. proc means data=work.ptf_pp mean nonobs;
  423. var freq;
  424. class density;
  425. output out=work.average_claims_freq2 (drop= FREQ TYPE);
  426. types density;
  427. run;
  428.  
  429. title "Average Frequency by HP";
  430. proc means data=work.ptf_pp mean nonobs;
  431. var freq;
  432. class hp;
  433. output out=work.average_claims_freq3 (drop= FREQ TYPE);
  434. types hp;
  435. run;
  436.  
  437. /* 23 */
  438. title "Average Claims Cost by Age";
  439. proc means data=work.ptf_pp mean nonobs;
  440. var cost;
  441. class age;
  442. output out=work.average_claims_cost1 (drop= FREQ TYPE);
  443. types age;
  444. run;
  445.  
  446. title "Average Claims Cost by Density";
  447. proc means data=work.ptf_pp mean nonobs;
  448. var cost;
  449. class density;
  450. output out=work.average_claims_cost2 (drop= FREQ TYPE);
  451. types density;
  452. run;
  453.  
  454. title "Average Claims Cost by HP";
  455. proc means data=work.ptf_pp mean nonobs;
  456. var cost;
  457. class hp;
  458. output out=work.average_claims_cost3 (drop= FREQ TYPE);
  459. types hp;
  460. run;
  461.  
  462. /* 24 */
  463. title "Average Pure Premium of the Current Portfolio";
  464. proc means data=work.ptf_pp mean nonobs;
  465. var pp;
  466. output out=work.average_pp (drop= FREQ TYPE);
  467. run;
  468.  
  469. /* 25 */
  470. proc sort data=work.ptf_pp;
  471. by pp;
  472. run;
  473.  
  474. proc print data=work.ptf_pp (obs=1); var age density hp; run;
  475.  
  476. /* 26 */
  477. proc sort data=work.ptf_pp;
  478. by descending pp;
  479. run;
  480.  
  481. proc print data=work.ptf_pp (obs=1); var age density hp; run;
  482.  
  483. /* 27 */
  484. proc print data=work.table_volume label noobs;
  485. label A="Strategy A" B="Strategy B" C="Strategy C";
  486. run;
  487.  
  488. /* 28 */
  489. proc print data=work.table_profit label noobs;
  490. label profit_A="Strategy A" profit_B="Strategy B" profit_C="Strategy C";
  491. run;
  492.  
  493. /* 29 */
  494. data work.final_price;
  495. set work.price;
  496. keep age hp density pA; /* keeping pA since it is the highest profit based on the above instruciton*/
  497. rename pA=best_price;
  498. run;
  499.  
  500. proc print data=work.final_price noobs; run;
  501.  
  502. /* END SAS CODE */
  503.  
  504. ods layout end;
  505. ods PDF CLOSE;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement