The content explains different methods for handling missing values in a table. The methods include filling missing values with the mode, mean, median, or a specified value, using a matrix completion model, deleting rows with missing values, or leaving the column untouched. The content also provides a parameter table with optional parameters for customizing the handling of missing values.
------

SET SCHEMA DM_PAL;

DROP TABLE META_DATA_TAB;
CREATE COLUMN TABLE META_DATA_TAB(
    "VARIABLE_NAME" NVARCHAR(50),
    "VARIABLE_TYPE" NVARCHAR(50)
);

INSERT INTO META_DATA_TAB VALUES ('X1',    'CONTINUOUS');
INSERT INTO META_DATA_TAB VALUES ('Y' ,    'TARGET');
INSERT INTO META_DATA_TAB VALUES ('X2',    'CONTINUOUS');

DROP TABLE PAL_DATA_TBL;
CREATE COLUMN TABLE PAL_DATA_TBL(
    "ID" INT,
    "VARIABLE_NAME" NVARCHAR(50),
    "VALUE" NVARCHAR(50), 
    "PURPOSE" INT
);
INSERT INTO PAL_DATA_TBL VALUES (0,     'Y',    '0.5',      1);
INSERT INTO PAL_DATA_TBL VALUES (0,     'X1',   '0.13',     1);
INSERT INTO PAL_DATA_TBL VALUES (0,     'X2',   '0.33',     1);
INSERT INTO PAL_DATA_TBL VALUES (1,     'Y',    '0.15',     1);
INSERT INTO PAL_DATA_TBL VALUES (1,     'X1',   '0.14',     1);
INSERT INTO PAL_DATA_TBL VALUES (1,     'X2',   '0.34',     1);
INSERT INTO PAL_DATA_TBL VALUES (2,     'Y',    '0.25',     2);
INSERT INTO PAL_DATA_TBL VALUES (2,     'X1',   '0.15',     2);
--INSERT INTO PAL_DATA_TBL VALUES (2,     'X2',   '0.36',     2);
INSERT INTO PAL_DATA_TBL VALUES (3,     'Y',    '0.35',     1);
INSERT INTO PAL_DATA_TBL VALUES (3,     'X1',   '0.16',     1);
INSERT INTO PAL_DATA_TBL VALUES (3,     'X2',   '0.35',     1);
INSERT INTO PAL_DATA_TBL VALUES (4,     'Y',    '0.45',     1);
INSERT INTO PAL_DATA_TBL VALUES (4,     'X1',   '0.17',     1);
INSERT INTO PAL_DATA_TBL VALUES (4,     'X2',   '0.37',     1);
INSERT INTO PAL_DATA_TBL VALUES (5,     'Y',    '0.55',     1);
--INSERT INTO PAL_DATA_TBL VALUES (5,     'X1',   '0.18',     1);
INSERT INTO PAL_DATA_TBL VALUES (5,     'X2',   '0.38',     1);
INSERT INTO PAL_DATA_TBL VALUES (6,     'Y',    '0.65',     2);
INSERT INTO PAL_DATA_TBL VALUES (6,     'X1',   '0.19',     2);
INSERT INTO PAL_DATA_TBL VALUES (6,     'X2',   '0.39',     2);
INSERT INTO PAL_DATA_TBL VALUES (7,     'Y',    '0.75',     2);
INSERT INTO PAL_DATA_TBL VALUES (7,     'X1',   '0.19',     2);
INSERT INTO PAL_DATA_TBL VALUES (7,     'X2',   '0.31',     2);
INSERT INTO PAL_DATA_TBL VALUES (8,     'Y',    '0.85',     1);
INSERT INTO PAL_DATA_TBL VALUES (8,     'X1',   '0.11',     1);
INSERT INTO PAL_DATA_TBL VALUES (8,     'X2',   '0.32',     1);
INSERT INTO PAL_DATA_TBL VALUES (9,     'Y',    '0.95',     1);
INSERT INTO PAL_DATA_TBL VALUES (9,     'X1',   '0.12',     1);
INSERT INTO PAL_DATA_TBL VALUES (9,     'X2',   '0.33',     1);

DROP TABLE PAL_PARAMETER_TBL;
CREATE COLUMN TABLE PAL_PARAMETER_TBL (
    "PARAM_NAME" VARCHAR (256),
    "INT_VALUE" INTEGER,
    "DOUBLE_VALUE" DOUBLE,
    "STRING_VALUE" VARCHAR (1000)
);

INSERT INTO PAL_PARAMETER_TBL VALUES ('FUNCTION',null,null,'EXP'); 
INSERT INTO PAL_PARAMETER_TBL VALUES ('HANDLE_MISSING_VALUE',1,null,null); 
INSERT INTO PAL_PARAMETER_TBL VALUES ('PMML_EXPORT',2,null,null); 
INSERT INTO PAL_PARAMETER_TBL VALUES ('PARTITION_METHOD',1,null,null); 
INSERT INTO PAL_PARAMETER_TBL VALUES ('THREAD_RATIO', null,0.5,null);

DROP TABLE PAL_DATA_MODEL_TBL;
CREATE COLUMN TABLE PAL_DATA_MODEL_TBL(
     "ROW_INDEX" INTEGER,
     "PART_INDEX" INTEGER,
     "MODEL_CONTENT" VARCHAR (5000)
);

DO BEGIN
  meta_data_tab = SELECT * FROM META_DATA_TAB;
  data_tab = SELECT * FROM PAL_DATA_TBL; 
  control_tab = SELECT * FROM PAL_PARAMETER_TBL; 
  CALL _SYS_AFL.PAL_UNIFIED_REGRESSION_PIVOT(:meta_data_tab, :data_tab, :control_tab, model_tab, fit_tab, stats_tab, optimal_parameter_tab, place_holder_1_tab, place_holder_2_tab); 
  INSERT into PAL_DATA_MODEL_TBL SELECT * FROM :model_tab; 
END;
