Advertisement
Guest User

kodprojekt

a guest
Jan 23rd, 2019
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SAS 12.19 KB | None | 0 0
  1. data loan;
  2. set tmp1.loan;
  3. run;
  4. data client;
  5. set tmp1.client;
  6. run;
  7. data disp;
  8. set tmp1.disp;
  9. run;
  10. data account;
  11. set tmp1.account;
  12. run;
  13. data card;
  14. set tmp1.card;
  15. run;
  16. data district;
  17. set tmp1.district;
  18. run;
  19. data order;
  20. set tmp1.order;
  21. run;
  22. data trans;
  23. set tmp1.trans;
  24. run;
  25.  
  26. /*
  27.  * wiek i plec
  28.  */
  29. proc sql;
  30. CREATE table datakredytu as
  31. SELECT loan.*, client.*, disp.*
  32.  
  33. FROM ((disp
  34. INNER JOIN loan ON disp.account_id = loan.account_id)
  35. INNER JOIN client ON disp.client_id = client.client_id)
  36. WHERE type = 'OWNER'
  37. ;
  38.  
  39. quit;
  40.  
  41.  
  42.  
  43. data asd.zwiek(keep=client_id account_id birth_number date data_ur wiek plec where=(wiek>=18));
  44. set datakredytu;
  45. if (substrn(birth_number, 3, 2)  > 12) then
  46.     do;
  47.         plec = 1;
  48.         data_ur = INPUT(PUT((birth_number - 5000 + 19000000),8.),YYMMDD8.);
  49.         FORMAT data_ur YYMMDD8.;
  50.         wiek = floor((date - data_ur)/365);
  51.     end;
  52.     else
  53.     do;
  54.         plec = 0;
  55.         data_ur = INPUT(PUT((birth_number + 19000000),8.),YYMMDD8.);
  56.         FORMAT data_ur YYMMDD8.;
  57.         wiek = floor((date - data_ur)/365);
  58.     end;
  59. run;
  60.  
  61. proc sort data=asd.zwiek;
  62. by wiek;
  63. quit;
  64.  
  65. /*
  66.  * staz klienta w dniach
  67.  */
  68. proc sql;
  69. CREATE table stazklienta as
  70. SELECT account.account_id, account.date as data_konta, client.*, disp.*, loan.date as data_pozyczki, loan.account_id
  71.  
  72. FROM (((disp
  73. INNER JOIN account ON disp.account_id = account.account_id)
  74. INNER JOIN loan ON loan.account_id = disp.account_id)
  75. INNER JOIN client ON disp.client_id = client.client_id)
  76. WHERE type = 'OWNER'
  77. ;
  78.  
  79. quit;
  80.  
  81. data asd.stazklienta;
  82. set stazklienta;
  83. staz_dni = data_pozyczki - data_konta;
  84. run;
  85.  
  86.  
  87. /*
  88.  * Czy karta gold
  89.  */
  90.  
  91. proc sql;
  92. CREATE table kartaczygold as
  93. SELECT card.disp_id, card.type as typ_karty, disp.disp_id, disp.type as typ_disp
  94.  
  95. FROM (disp
  96. INNER JOIN card ON disp.disp_id = card.disp_id)
  97. WHERE typ_disp = 'OWNER'
  98. ;
  99.  
  100. quit;
  101.  
  102. data asd.kartagold;
  103. set kartaczygold;
  104.     if( typ_karty = 'gold') then
  105.     do;
  106.         czy_gold = 1;
  107.     end;
  108.     else
  109.     do;
  110.         czy_gold = 0;
  111.     end;
  112.    
  113. run;
  114.  
  115. /*liczba mieszkancow sas 4gl
  116. */
  117. data districtzid;
  118. set district(rename=(A1 = district_id));
  119. run;
  120.  
  121. proc sort data=districtzid;
  122. by district_id;
  123. run;
  124. proc sort data=client;
  125. by district_id;
  126. run;
  127.  
  128. data templiczbamieszsas;
  129. merge districtzid(in=districtzid) client(in=client);
  130. by district_id;
  131. run;
  132.  
  133. data asd.liczbamiesz(keep=client_id district_id liczba_mieszkancow);
  134. set templiczbamieszsas(rename=(A4 = liczba_mieszkancow));
  135. run;
  136.  
  137. /*
  138.  * liczba miast
  139.  */
  140.  
  141. data districtzid;
  142. set district(rename=(A1 = district_id));
  143. run;
  144.  
  145. proc sort data=districtzid;
  146. by district_id;
  147. run;
  148. proc sort data=client;
  149. by district_id;
  150. run;
  151.  
  152. data templiczbamiastsas;
  153. merge districtzid(in=districtzid) client(in=client);
  154. by district_id;
  155. run;
  156.  
  157. data asd.liczbamiast(keep=client_id district_id liczba_miast);
  158. set templiczbamiastsas(rename=(A9 = liczba_miast));
  159. run;
  160.  
  161. /*średnia pensja
  162. */
  163. data districtzid;
  164. set district(rename=(A1 = district_id));
  165. run;
  166.  
  167. proc sort data=districtzid;
  168. by district_id;
  169. run;
  170. proc sort data=client;
  171. by district_id;
  172. run;
  173.  
  174. data tempsredniapensja;
  175. merge districtzid(in=districtzid) client(in=client);
  176. by district_id;
  177. run;
  178.  
  179. data asd.sredniapensja(keep=client_id district_id srednia_pensja);
  180. set tempsredniapensja(rename=(A11 = srednia_pensja));
  181. run;
  182.  
  183. /*jaki procent mieszka w miastach
  184. */
  185. data districtzid;
  186. set district(rename=(A1 = district_id));
  187. run;
  188.  
  189. proc sort data=districtzid;
  190. by district_id;
  191. run;
  192. proc sort data=client;
  193. by district_id;
  194. run;
  195.  
  196. data tempudzialmiastowych;
  197. merge districtzid(in=districtzid) client(in=client);
  198. by district_id;
  199. run;
  200.  
  201. data asd.udzialmiastowych(keep=client_id district_id udzial_miesz_miast);
  202. set tempudzialmiastowych(rename=(A10 = udzial_miesz_miast));
  203. run;
  204. /*wskaznik przedsiebiorcow na 1000 mieszkancow
  205. */
  206. data districtzid;
  207. set district(rename=(A1 = district_id));
  208. run;
  209.  
  210. proc sort data=districtzid;
  211. by district_id;
  212. run;
  213. proc sort data=client;
  214. by district_id;
  215. run;
  216.  
  217. data tempwskprzedsiebiorcow;
  218. merge districtzid(in=districtzid) client(in=client);
  219. by district_id;
  220. run;
  221.  
  222. data asd.wskaprzedsiebiorcow(keep=client_id district_id wsk_przedsiebiorcow_1000);
  223. set tempwskprzedsiebiorcow(rename=(A14 = wsk_przedsiebiorcow_1000));
  224. run;
  225. /* przyrost bezrobocia
  226. poziom bezrobocia 95
  227. poziom bezrobocia 96
  228. */
  229. data districtzid;
  230. set district(rename=(A1 = district_id));
  231. run;
  232.  
  233. proc sort data=districtzid;
  234. by district_id;
  235. run;
  236. proc sort data=client;
  237. by district_id;
  238. run;
  239.  
  240. data tempbezrobocie;
  241. merge districtzid(in=districtzid) client(in=client);
  242. by district_id;
  243. run;
  244.  
  245. data asd.bezrob(keep=client_id district_id poziom_bezrobocia_95 poziom_bezrobocia_96 przyrost_bezrob_proc);
  246. set tempbezrobocie(rename=(A12 = poziom_bezrobocia_95 A13 = poziom_bezrobocia_96));
  247. przyrost_bezrob_proc = (poziom_bezrobocia_96/poziom_bezrobocia_95)*100;
  248. run;
  249. /*order plus account
  250. */
  251.  
  252. proc sort data=account;
  253. by account_id;
  254. run;
  255. proc sort data=order;
  256. by account_id;
  257. run;
  258. data tempzlecstale;
  259. merge account(in=account) order(in=order);
  260. by account_id;
  261. run;
  262. data asd.zlecstale(keep=account_id );
  263. set tempzlecstale;
  264.  
  265. run;
  266.  
  267. /*
  268. */
  269. data stale;
  270. set order;
  271. run;
  272.  
  273. /*
  274. * laczne i srednie kwoty zlecenia stalego na sipo, czyli oplaty na dom
  275. */
  276. proc sql;
  277. CREATE table zlecstale2ubezsipo as
  278. SELECT stale.account_id, sum(stale.amount) as laczne_wydatki_dom,
  279.         avg(stale.amount) as srednia_wydatki_ubez
  280.  
  281. FROM stale
  282. WHERE k_symbol = 'SIPO'
  283. GROUP BY stale.account_id
  284. ;
  285.  
  286. quit;
  287. /*
  288. * laczne i srednie kwoty zlecenia stalego na poistne, czyli oplaty na ubezpieczenie
  289. */
  290. proc sql;
  291. CREATE table zlecstale2ubezpojistne as
  292. SELECT stale.account_id, sum(stale.amount) as laczne_wydatki_ubez,
  293.         avg(stale.amount) as srednia_wydatki_ubez
  294.  
  295. FROM stale
  296. WHERE k_symbol = 'POJISTNE'
  297. GROUP BY stale.account_id
  298. ;
  299.  
  300. quit;
  301.  
  302. /*
  303. * laczne i srednie kwoty zlecenia stalego na leasing
  304. */
  305. proc sql;
  306. CREATE table zlecstale2ubezleasing as
  307. SELECT stale.account_id, sum(stale.amount) as laczne_wydatki_leasing,
  308.         avg(stale.amount) as srednia_wydatki_leasing
  309.  
  310. FROM stale
  311. WHERE k_symbol = 'LEASING'
  312. GROUP BY stale.account_id
  313. ;
  314.  
  315. quit;
  316.  
  317.  
  318. /*
  319. test czy ma ujemny stan konta
  320. */
  321. proc sql;
  322. create table ujemne_konto as
  323. select trans.account_id,
  324.         trans.date as date_trans, trans.k_symbol,
  325.         loan.account_id, loan.date as date_loan
  326. FROM (trans
  327.     INNER JOIN loan ON loan.account_id = trans.account_id)
  328.  
  329. where date_trans < date_loan
  330. group by loan.account_id, date_trans;
  331. quit;
  332.  
  333. data czydluznik;
  334. set ujemne_konto;
  335.     if( k_symbol = 'SANKC. UROK') then
  336.     do;
  337.         zm_czydluznik = 1;
  338.     end;
  339.     else
  340.     do;
  341.         zm_czydluznik = 0;
  342.     end;
  343.    
  344. run;
  345. data czydluznik2;
  346. set czydluznik;
  347. by account_id;
  348. if last.account_id then output;
  349. keep account_id zm_czydluznik;
  350. run;
  351.  
  352.  
  353.  
  354.  
  355. /*
  356. koniec testu
  357. */
  358.  
  359. /*laczne i srednie kwoty przychodow
  360. */
  361. proc sql;
  362. CREATE table trans_wplywy as
  363. SELECT account_id, sum(amount) as laczne_wplywy,
  364.         avg(amount) as srednie_wplywy
  365.  
  366. FROM trans
  367. WHERE type = 'PRIJEM'
  368. GROUP BY account_id
  369. ;
  370.  
  371. quit;
  372. /*laczne i srednie kwoty przychodow ze wzgl na operation vklad
  373. */
  374. proc sql;
  375. CREATE table trans_wplywy_vklad as
  376. SELECT account_id, sum(amount) as laczne_wplywy_vklad,
  377.         avg(amount) as srednie_wplywy_vklad
  378.  
  379. FROM trans
  380. WHERE (type = 'PRIJEM' and operation = 'VKLAD')
  381. GROUP BY account_id
  382. ;
  383.  
  384. quit;
  385. /*laczne i srednie kwoty wydatkow
  386. */
  387. proc sql;
  388. CREATE table trans_wydatki as
  389. SELECT account_id, sum(amount) as laczne_wydatki,
  390.         avg(amount) as srednie_wydatki
  391.  
  392. FROM trans
  393. WHERE type = 'VYDAJ'
  394. GROUP BY account_id
  395. ;
  396.  
  397. quit;
  398.  
  399.  
  400.  
  401. /*laczne i srednie kwoty przychodow ze wzgledu na operation vyber karta
  402. */
  403. proc sql;
  404. CREATE table trans_wydatki_vyberkart as
  405. SELECT account_id, sum(amount) as laczne_wydatki_vyberkart,
  406.         avg(amount) as srednie_wydatki_vyberkart
  407.  
  408. FROM trans
  409. WHERE (type = 'VYDAJ' and operation = 'VYBER KARTOU')
  410. GROUP BY account_id
  411. ;
  412.  
  413. quit;
  414. /*laczne i srednie kwoty przychodow ze wzgledu na operation vyber
  415. */
  416. proc sql;
  417. CREATE table trans_wydatki_vyber as
  418. SELECT account_id, sum(amount) as laczne_wydatki_vyber,
  419.         avg(amount) as srednie_wydatki_vyber
  420.  
  421. FROM trans
  422. WHERE (type = 'VYDAJ' and operation = 'VYBER')
  423. GROUP BY account_id
  424. ;
  425.  
  426. quit;
  427. /*wskaznik vklad na vklad laczny
  428. */
  429. data trans_wp1;
  430. set trans_wplywy_vklad;
  431. run;
  432. data trans_wp2;
  433. set trans_wplywy;
  434. run;
  435.  
  436.  
  437. data temp_wsk_wklad;
  438. merge trans_wp1(in=trans_wp1) trans_wp2(in=trans_wp2);
  439. by account_id;
  440. run;
  441.  
  442. data wsk_wklad(keep = account_id wsk_wkl_proc);
  443. set temp_wsk_wklad;
  444. wsk_wkl_proc = (laczne_wplywy_vklad/laczne_wplywy)*100;
  445. run;
  446.  
  447. /*wskaznik wydatki na wydatki laczne
  448. */
  449.  
  450.  
  451. data temp_wsk_vyber_p;
  452. merge trans_wydatki_vyber(in=trans_wydatki_vyber) trans_wydatki(in=trans_wydatki);
  453. by account_id;
  454. run;
  455.  
  456. data wsk_vyber_p(keep = account_id wsk_vyber_p_proc);
  457. set temp_wsk_vyber_p;
  458. wsk_vyber_p_proc = (laczne_wydatki_vyber/laczne_wydatki)*100;
  459. run;
  460.  
  461. /*wskaznik wydatki karta na wydatki laczne
  462. */
  463.  
  464.  
  465. data temp_wsk_vyber_k;
  466. merge trans_wydatki_vyberkart(in=trans_wydatki_vyberkart) trans_wydatki(in=trans_wydatki);
  467. by account_id;
  468. run;
  469.    
  470.  
  471. data wsk_vyber_k(keep = account_id wsk_vyber_k_proc);
  472. set temp_wsk_vyber_k;
  473. wsk_vyber_k_proc = (laczne_wydatki_vyberkart/laczne_wydatki)*100;
  474. run;
  475. data wsk_vyber_k2;
  476. set wsk_vyber_k;
  477.         if wsk_vyber_k_proc=. then do wsk_vyber_k_proc=0;
  478.         end;
  479. run;
  480.  
  481. /* asd do worka
  482. */
  483. data zwiek;
  484. set asd.zwiek;
  485. run;
  486. data zlecstale;
  487. set asd.zlecstale;
  488. run;
  489. data liczbamiesz;
  490. set asd.liczbamiesz;
  491. run;
  492. data bezrob;
  493. set asd.bezrob;
  494. run;
  495. data czydluznik;
  496. set asd.czydluznik;
  497. run;
  498. data liczbamiast;
  499. set asd.liczbamiast;
  500. run;
  501. data sredniapensja;
  502. set asd.sredniapensja;
  503. run;
  504. data stazklienta;
  505. set asd.stazklienta;
  506. run;
  507. data udzialmiastowych;
  508. set asd.udzialmiastowych;
  509. run;
  510. data wskaprzedsiebiorcow;
  511. set asd.wskaprzedsiebiorcow;
  512. run;
  513.  
  514. /*koncowa tabela
  515. */
  516.  
  517. proc sql;
  518. CREATE table tabelakoncowa as
  519. SELECT *
  520.  
  521. FROM (((((((zwiek
  522. INNER JOIN  liczbamiesz ON liczbamiesz.client_id = zwiek.client_id)
  523. INNER JOIN  liczbamiast ON liczbamiast.client_id = zwiek.client_id)
  524. INNER JOIN  sredniapensja ON sredniapensja.client_id = zwiek.client_id)
  525. INNER JOIN  stazklienta ON stazklienta.client_id = zwiek.client_id)
  526. INNER JOIN  udzialmiastowych ON udzialmiastowych.client_id = zwiek.client_id)
  527. INNER JOIN  wskaprzedsiebiorcow ON wskaprzedsiebiorcow.client_id = zwiek.client_id)
  528. INNER JOIN  bezrob ON bezrob.client_id = zwiek.client_id)
  529. ;
  530.  
  531. quit;
  532.  
  533. proc sort data = tabelakoncowa;
  534. by account_id;
  535. quit;
  536.  
  537. proc sql;
  538. CREATE TABLE tabelakoncowa2 as
  539. SELECT *
  540.  
  541. FROM (((((((((((tabelakoncowa
  542. LEFT JOIN  czydluznik2 ON czydluznik2.account_id= tabelakoncowa.account_id)
  543. LEFT JOIN  trans_wplywy ON trans_wplywy.account_id= tabelakoncowa.account_id)
  544. LEFT JOIN  trans_wplywy_vklad ON trans_wplywy_vklad.account_id= tabelakoncowa.account_id)
  545. LEFT JOIN  trans_wydatki ON trans_wydatki.account_id= tabelakoncowa.account_id)
  546. LEFT JOIN  trans_wydatki_vyber ON trans_wydatki_vyber.account_id= tabelakoncowa.account_id)
  547. LEFT JOIN  trans_wydatki_vyberkart ON trans_wydatki_vyberkart.account_id= tabelakoncowa.account_id)
  548. LEFT JOIN  wsk_vyber_k2 ON wsk_vyber_k2.account_id= tabelakoncowa.account_id)
  549. LEFT JOIN  wsk_vyber_p ON wsk_vyber_p.account_id= tabelakoncowa.account_id)
  550. LEFT JOIN  wsk_wklad ON wsk_wklad.account_id= tabelakoncowa.account_id)
  551. LEFT JOIN  zlecstale2ubezsipo ON zlecstale2ubezsipo.account_id= tabelakoncowa.account_id)
  552. LEFT JOIN  zlecstale2ubezpojistne ON zlecstale2ubezpojistne.account_id= tabelakoncowa.account_id);
  553.  
  554. quit;
  555.  
  556. data projekt;
  557. set tabelakoncowa2;
  558. if laczne_wydatki_vyberkart = . then do laczne_wydatki_vyberkart = 0;
  559. end;
  560. if srednie_wydatki_vyberkart = . then do srednie_wydatki_vyberkart = 0;
  561. end;
  562. if laczne_wydatki_dom = . then do laczne_wydatki_dom = 0;
  563. end;
  564. if srednia_wydatki_ubez = . then do srednia_wydatki_ubez = 0;
  565. end;
  566. if laczne_wydatki_ubez = . then do laczne_wydatki_ubez = 0;
  567. end;
  568. run;
  569.  
  570. data loan2;
  571. set loan;
  572. If status in ('A', 'C') then default=0;
  573. If status in ('B', 'D') then default=1;
  574.  
  575. run;
  576.  
  577. proc sql;
  578. create table projekt2 as
  579. select *
  580. from (loan2
  581. left join projekt on loan2.account_id = projekt.account_id);
  582. quit;
  583.  
  584. data projektkonc (drop = account_id date client_id district_id disp_id);
  585. set projekt2;
  586. run;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement