Как я могу улучшить свой код SAS? Выполнение кода займет так много времени - PullRequest
0 голосов
/ 30 сентября 2019

Как я могу улучшить этот фрагмент кода, потому что это займет так много времени, чтобы более чем 7000 элементов. Следующим шагом будет выполнение этого кода на 300000 строк.

Могу ли я написать другой вариант для ускорения кода?

PROC SQL;

UPDATE GRV_Export_Dummy D
    SET 'PAYMENTROLE'n = 
                            (CASE
                                WHEN (SELECT 'H01'n FROM SERVER.VIEWTABLE V WHERE D.VTITEM = V.VTGONR) = '1' &
                                     (SELECT 'H02'n FROM SERVER.VIEWTABLE V WHERE D.VTITEM = V.VTGONR) = '1' &
                                     (SELECT 'H03'n FROM SERVER.VIEWTABLE V WHERE D.VTITEM = V.VTGONR) = '1' &
                                     (SELECT 'H04'n FROM SERVER.VIEWTABLE V WHERE D.VTITEM = V.VTGONR) = '1' &
                                     (SELECT 'H05'n FROM SERVER.VIEWTABLE V WHERE D.VTITEM = V.VTGONR) = '1' &
                                     (SELECT 'H06'n FROM SERVER.VIEWTABLE V WHERE D.VTITEM = V.VTGONR) = '1' 
                                THEN 'H/' 
                                ELSE ''
                            END)
                            ||
                            (CASE
                                WHEN (SELECT 'H01'n FROM SERVER.VIEWTABLE V WHERE D.VTITEM = V.VTGONR) <> '1' !
                                     (SELECT 'H02'n FROM SERVER.VIEWTABLE V WHERE D.VTITEM = V.VTGONR) <> '1' !
                                     (SELECT 'H03'n FROM SERVER.VIEWTABLE V WHERE D.VTITEM = V.VTGONR) <> '1' !
                                     (SELECT 'H04'n FROM SERVER.VIEWTABLE V WHERE D.VTITEM = V.VTGONR) <> '1' !
                                     (SELECT 'H05'n FROM SERVER.VIEWTABLE V WHERE D.VTITEM = V.VTGONR) <> '1' !
                                     (SELECT 'H06'n FROM SERVER.VIEWTABLE V WHERE D.VTITEM = V.VTGONR) <> '1'
                                THEN
                                    (CASE WHEN (SELECT 'H01'n FROM SERVER.VIEWTABLE V WHERE D.VTITEM = V.VTGONR) = '1' THEN 'H1/' ELSE '' END) ||
                                    (CASE WHEN (SELECT 'H02'n FROM SERVER.VIEWTABLE V WHERE D.VTITEM = V.VTGONR) = '1' THEN 'H2/' ELSE '' END) ||
                                    (CASE WHEN (SELECT 'H03'n FROM SERVER.VIEWTABLE V WHERE D.VTITEM = V.VTGONR) = '1' THEN 'H3/' ELSE '' END) ||
                                    (CASE WHEN (SELECT 'H04'n FROM SERVER.VIEWTABLE V WHERE D.VTITEM = V.VTGONR) = '1' THEN 'H4/' ELSE '' END) ||
                                    (CASE WHEN (SELECT 'H05'n FROM SERVER.VIEWTABLE V WHERE D.VTITEM = V.VTGONR) = '1' THEN 'H5/' ELSE '' END) ||
                                    (CASE WHEN (SELECT 'H06'n FROM SERVER.VIEWTABLE V WHERE D.VTITEM = V.VTGONR) = '1' THEN 'H6/' ELSE '' END) 
                                ELSE ''
                            END)
WHERE D.VTITEM IN (SELECT V.VTGONR FROM SERVER.VIEWTABLE V WHERE D.VTITEM = V.VTGONR);
QUIT;

РЕДАКТИРОВАТЬ 01.10.2019 здесь мы идем, некоторые примерыЭто всего лишь небольшой фрагмент кода из моего кода, у меня есть еще такие случаи.

OUTPUT    
SAMPLE 1 --> H1/H6
SAMPLE 2 --> H/
SAMPLE 3 --> H3/H4/H5/H6

<table border=1>
<tr>
<td>VTGONR</td>
<td>H01</td>
<td>H02</td>
<td>H03</td>
<td>H04</td>
<td>H05</td>
<td>H06</td>
</tr>
<tr>
<td>6123456</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>1</td>
</tr>
<tr>
<td>6135678</td>
<td>1</td>
<td>1</td>
<td>1</td>
<td>1</td>
<td>1</td>
<td>1</td>
</tr>
<tr>
<td>5797897</td>
<td>0</td>
<td>0</td>
<td>1</td>
<td>1</td>
<td>1</td>
<td>1</td>
</tr>
</table>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...