I am trying to create table which is in sas to postgressql but I have problem understanding what this sas code does. Here is my code:-
DATA work."WC7I7AHE"n
(keep = "DMMCU"n "DMITM"n "DMVEND"n "IBVEND"n "IBVEND_1110"n )
;
attrib "DMMCU"n length=$12 format=$12. label="Business Unit"
"DMITM"n length=8 format=8. label="Item Number - Short"
"DMVEND"n length=8 format=8. label="Supplier Number"
"IBVEND"n length=8 format=8. label="Supplier Number"
"IBVEND_1110"n length=8 format=8. label="Supplier Number"
"IBITM"n length= 8
"IBMCU"n length= $12
ETLS_W2NX3KTY4 length= 8
;
retain missing0-missing1 0;
etls_assign_target_value = 0;
/* Build hash objects from lookup tables before reading first source row */
if (_n_ = 1) then
do;
/* Build hash h0 from lookup table etls_temp_lookupview0 */
nlobs = .;
dsid = open("etls_temp_lookupview0");
if (dsid > 0) then
do;
if ( attrc(dsid, 'MTYPE') = 'DATA' ) then
nlobs = attrn(dsid, 'NLOBS');
else
nlobs = -1;
dsid = close(dsid);
if (nlobs ^= 0) then
do;
if (nlobs > 0) then
exponent = ceil(log2(nlobs));
else
exponent = 8;
declare hash h0(dataset: "etls_temp_lookupview0", hashexp: exponent);
h0.defineKey( "IBITM",
"IBMCU");
h0.defineData( "IBVEND");
h0.defineDone();
if (nlobs = -1) then
do;
if (h0.Num_Items < 1) then
do;
put "NOTE: Lookup table is empty: etls_temp_lookupview0";
put "NOTE: Abort action indicated, condition= Lookup table is empty:"
" etls_temp_lookupview0";
abort 3;
end;
end;
end;
else
do;
put "NOTE: Lookup table is empty: etls_temp_lookupview0";
put "NOTE: Abort action indicated, condition= Lookup table is empty:"
" etls_temp_lookupview0";
abort 3;
end;
end;
else
do;
put "NOTE: Lookup table does not exist or cannot be opened:"
" etls_temp_lookupview0";
put "NOTE: Abort action indicated, condition= Lookup table missing:"
" etls_temp_lookupview0";
abort 3;
end;
/* Build hash h1 from lookup table etls_temp_lookupview1 */
nlobs = .;
dsid = open("etls_temp_lookupview1");
if (dsid > 0) then
do;
if ( attrc(dsid, 'MTYPE') = 'DATA' ) then
nlobs = attrn(dsid, 'NLOBS');
else
nlobs = -1;
dsid = close(dsid);
if (nlobs ^= 0) then
do;
if (nlobs > 0) then
exponent = ceil(log2(nlobs));
else
exponent = 8;
declare hash h1(dataset: "etls_temp_lookupview1", hashexp: exponent);
h1.defineKey( "IBITM");
h1.defineData( "ETLS_W2NX3KTY4");
h1.defineDone();
if (nlobs = -1) then
do;
if (h1.Num_Items < 1) then
do;
put "NOTE: Lookup table is empty: etls_temp_lookupview1";
put "NOTE: Abort action indicated, condition= Lookup table is empty:"
" etls_temp_lookupview1";
abort 3;
end;
end;
end;
else
do;
put "NOTE: Lookup table is empty: etls_temp_lookupview1";
put "NOTE: Abort action indicated, condition= Lookup table is empty:"
" etls_temp_lookupview1";
abort 3;
end;
end;
else
do;
put "NOTE: Lookup table does not exist or cannot be opened:"
" etls_temp_lookupview1";
put "NOTE: Abort action indicated, condition= Lookup table missing:"
" etls_temp_lookupview1";
abort 3;
end;
call missing ("IBITM"n, "IBMCU"n, "IBVEND"n, "ETLS_W2NX3KTY4"n);
end; /* All hash objects have been defined */
/* Read a row from the source table */
set dmTBLS."DM_TURNOVER_TMP_VEND"n end = eof;
/* Is the current key value stored in hash h0? */
rc0 = h0.find(key: "DMITM"n,
key: "DMMCU"n);
/* Is the current key value stored in hash h1? */
rc1 = h1.find(key: "DMITM"n);
"IBVEND_1110"n = ETLS_W2NX3KTY4;
/* Examine success of lookups */
if ( rc0=0 and rc1=0 ) then
do;
/* Write row to target */
output work."WC7I7AHE"n;
Till now I understood this part only
create table turnoverrate_tm.wc7i7ahe with these column dmmcu varchar(12), dmitm int, dmvend int, ibvend int, ibvend_1110 int
I couldn't understand what above sas code does.Please explain me.
I don't need code but just logic only
if...then...else...- cut those out.if...then do...endloops/code blocks - that as well. Whenever you see parentheses, check the documentation to see what the function does.