Преобразование непостоянной переменной высоты - PullRequest
0 голосов
/ 09 января 2020

У меня проблемы с эффективным преобразованием неверно закодированной переменной высоты в моем образце.

Переменная закодирована следующим образом:

     Height 
ID1    601   
ID1    601   
ID1    601   
ID3    409   
ID3    410   
ID4    511
.      .
.      .
.      .
ID100  400

Как видите, переменная закодирована в футах и ​​дюймах одновременно, где 601 равно 6 футам 1 дюйм, 511 равно 5 футов 11 дюймов и др. c.

Моя цель - преобразовать эти числа в дюймы:

replace Height = 48 if Height == 400 
replace Height = 49 if Height == 401
replace Height = 50 if Height == 402
replace Height = 51 if Height == 403
.
.
.
replace Height = 83 if Height == 611

Как эффективно кодировать это с помощью al oop?

Ответы [ 2 ]

2 голосов
/ 09 января 2020

Это можно сделать в одной строке как чисто числовую c операцию. Преобразование в строку и обратно совершенно не нужно. Нет l oop не требуется.

generate wanted = 12 * floor(height/100) + mod(height, 100)
1 голос
/ 09 января 2020

Код ниже предполагает, что каждое наблюдение Height содержит ровно три цифры:

tostring Height, generate(Height_string)
    /* Generate a new variable which is a string-version of Height
       (so that we can get the individual digits) */

generate feet = substr(Height_string, 1, 1)
    /* From the first character in the string, select one character */

generate inch = substr(Height_string, 2, 2)
    /* From the second character in the string, select two characters.
       An equivalent alternative would have been
       generate inch = substr(Height_string, -2, 2)
       which from the second to last character selects two characters */

destring feet inch, replace
    /* Convert these two new variables to numeric */

generate tot_inch = feet * 12 + inch
    /* Generate a new variable which measure only in inches. */
...