Announcement

Collapse
No announcement yet.
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • How compare categories from a one variable they are the same among 10 data sets.

    Hello everybody,
    I’m working whit 10 data sets from the household survey, and I want to know if in all data set the variable_x to have same categories.
    Variable_x has educations levels, but I don’t sure if the same among data sets.
    How I can generate a table or output to check all data sets on the among they are the same categories.
    Thank you in advance.
    I working whit Stata 14
    Juan

    P.D. for instance 2006 2007
    Click image for larger version

Name:	2006 vs 2007.png
Views:	1
Size:	73.3 KB
ID:	1479662

  • #2
    Well, assuming your data sets are named survey2006.dta, survey2007.dta, ...survey2015.dta, you could do this:

    Code:
    clear*
    local common
    forvalues y = 2006/2015 {
        use survey`y', clear
        levelsof variable_x, local(vx`y')
        local common: list common & vx`y'
    }
    
    forvlues y = 2006/2015 {
        local extra: list vx`y' - common
        local missing: list common - vx`y'
        display "survey`y'.dta contains extra values: `extra'
    }
    The idea behind the code is to create a list of those values of variable_x that are common to all 10 data sets. Then we list out for each data set any additional values that are found in that one. If variable_x has exactly the same values in all of the data sets, then there will be no output at all for the extra values.

    Now, what cannot be discerned from the information in your post is whether variable_x is a string variable or is a value-labeled numeric variable. The code will work properly for a string variable. For a value-labeled numeric variable it may or may not work properly. If "Normal" is coded as, say 5, in one data set, and 5 appears in all data sets, but is the code for Ninguno in some of them, then this code may fail--it will correctly recognize that 5 appears in all data sets, but it will not notice that it means something different in each.

    If you are dealing with a value-labeled numeric variable, then it is much more complicated because the task is not just to determine whether the same values appear in all of them, but whether they are also coded the same way. If that's your situation, use the -dataex- command to show example data from two or three of the data sets, and post back.

    If you are running version 15.1 or a fully updated version 14.2, -dataex- is already part of your official Stata installation. If not, run -ssc install dataex- to get it. Either way, run -help dataex- to read the simple instructions for using it. -dataex- will save you time; it is easier and quicker than typing out tables. It includes complete information about aspects of the data that are often critical to answering your question but cannot be seen from tabular displays or screenshots. It also makes it possible for those who want to help you to create a faithful representation of your example to try out their code, which in turn makes it more likely that their answer will actually work in your data.

    When asking for help with code, always show example data. When showing example data, always use -dataex-.

    Comment


    • #3
      Thank you very much for the example Clyde, I tried to run the script but I do not get what you mention.
      I attach a do.file to generate two datasets for 2007 and 2014.
      In both, the variable nivedu indicates the educational level of each respondent.
      My interest is only to check if the labels of the categories are the same in both databases.
      The name with which it is saved is only 2006.dta, 2007.dta .... 2017.dta.


      *2014
      * Example generated by -dataex-. To install: ssc install dataex
      Code:
      clear
      input double(nivedu genero edad)
      22 1 64
       6 2 61
      19 2 37
       9 1 11
       1 1  4
      19 2 29
       . 2  2
       7 2 32
      10 2 15
      10 1 14
       9 2 10
       1 1  5
      23 1 69
      18 2 76
      19 1 44
       8 2 42
      10 1 22
      19 2 21
       9 1  9
       . 2  3
       6 1 50
       6 2 40
      19 2 22
      10 2 20
       . 2  3
      18 2 79
      19 2 45
      19 1 51
      10 1 20
      18 1 45
      18 2 40
       9 2 10
       3 2  7
      19 2 58
      19 2 25
      10 1 16
      19 2 88
      18 1 84
       6 2 81
      19 1 63
      25 2 44
      10 2 15
       9 2  9
      18 1 70
      18 2 68
      20 1 36
       6 2 30
       1 1  5
       1 1  4
      19 1 56
       6 2 42
      10 1 19
      10 1 18
      22 1 39
      20 2 38
      10 1 14
       9 2 11
       6 2 78
      23 1 60
      19 2 60
       6 1 53
      25 2 49
      25 1 24
      19 1 27
      18 2 29
       . 2  1
      18 2 66
      19 1 54
      19 2 36
      10 1 14
       9 1  8
      25 2 68
      19 1 80
      24 1 32
       8 2 20
       . 1  2
       . 2  0
       6 1 48
       5 2 48
       8 1 23
       7 2 17
      10 2 14
       8 2 19
       . 2  2
       4 1 35
       1 2 71
       4 2 46
      19 2 25
       5 1 45
       4 2 43
       7 1 24
       7 2 21
      10 2 20
      10 1 16
       9 1 11
       1 1 46
       1 2 47
      10 2 13
       9 1 11
       9 1  7
       . 1  3
       . 1  1
       9 2 14
       9 2 15
      10 1 21
       4 1 76
       4 2 71
      19 2 28
       1 2  4
      19 2 30
      19 1 31
       4 1 79
       8 1 29
       1 2 66
       6 2 31
       6 2 28
       5 2 36
      10 2 13
       . 2  3
       6 2 45
      19 2 20
      10 2 17
       9 2  9
       3 1  6
      19 1 27
      19 2 24
       . 1  1
      19 1 20
       6 1 34
       7 2 28
       9 1  9
       . 1  1
       . 1  0
       6 1 46
       6 2 43
      18 1 25
      18 2 22
      10 2 17
      10 1 14
      19 1 23
      15 2 28
       . 1  1
       6 2 44
      19 1 26
      19 2 24
      10 2 18
      18 1 65
      18 2 68
       4 1 66
       4 2 66
      25 1 44
       6 1 63
       6 2 60
       6 1 43
       6 2 43
      10 2 17
       9 1 15
       6 1 72
       6 2 19
      19 1 35
       8 1 32
      19 2 24
       . 2  1
      19 1 61
       6 2 42
      19 2 24
      19 1 22
      10 2 19
       7 1 17
      18 2 58
      10 2 15
      10 2 17
       . 2  0
      10 2 19
      19 1 30
      19 2 25
       1 1  5
      26 1 29
       6 1 62
       6 2 66
      19 1 50
      19 2 44
      19 1 20
      19 1 18
       9 2 14
      19 1 45
       6 2 45
      19 1 22
      19 1 20
      10 1 18
      10 1 16
      10 2 15
       5 1 59
       6 2 55
      19 1 23
       6 1 59
      19 2 57
       1 2 27
      19 1 24
       4 2 74
      end
      label values nivedu nivedu
      label def nivedu 1 "Ninguno", modify
      label def nivedu 3 "Educación pre-escolar", modify
      label def nivedu 4 "Básico (1 a 5 Años)", modify
      label def nivedu 5 "Intermedio (1 a3 años)", modify
      label def nivedu 6 "Medio (1 a 4 años)", modify
      label def nivedu 7 "Primaria (1 a 8 años)", modify
      label def nivedu 8 "Secundaria (1 a 4 años)", modify
      label def nivedu 9 "Primaria 1 a 6 años nuevo)", modify
      label def nivedu 10 " Actual-secundaria (1 a 6 años)", modify
      label def nivedu 15 "Educación secundaria de adultos (ESA)", modify
      label def nivedu 18 "Normal", modify
      label def nivedu 19 "Licenciatura Universidad pública", modify
      label def nivedu 20 "Licenciatura Universidad privada", modify
      label def nivedu 22 "Postgado-máster", modify
      label def nivedu 23 "Doctorado", modify
      label def nivedu 24 "Técnico de Universidad", modify
      label def nivedu 25 "Técnico de instituto>=1 año", modify
      label def nivedu 26 "ANAPOL o COLMIL", modify
      label values genero s2a_02
      label def s2a_02 1 "Hombre", modify
      label def s2a_02 2 "Mujer", modify
      *2007
      * Example generated by -dataex-. To install: ssc install dataex
      Code:
      clear
      input double(nivedu genero edad)
      1 1 67
      4 1 35
      5 2 34
      7 1 8
      . 1 2
      1 1 69
      20 1 83
      19 2 81
      1 2 75
      6 2 30
      . 2 4
      . 1 0
      1 1 69
      1 2 68
      4 1 39
      4 2 40
      5 1 46
      4 2 49
      7 2 10
      1 2 62
      4 2 57
      7 1 14
      . 1 4
      14 2 55
      14 1 47
      14 2 46
      5 1 48
      1 2 49
      . 2 2
      7 1 60
      1 2 66
      4 1 35
      4 2 36
      7 1 12
      7 1 11
      7 1 66
      1 2 60
      8 1 22
      7 2 19
      . 1 0
      1 2 81
      5 1 38
      1 2 38
      1 2 86
      2 1 67
      2 2 67
      5 1 40
      4 2 39
      7 2 15
      7 2 14
      7 2 11
      4 1 48
      4 2 41
      7 1 16
      7 1 12
      7 2 9
      7 2 7
      . 1 1
      7 1 15
      7 2 11
      7 2 9
      7 2 6
      1 1 63
      6 1 48
      4 2 47
      8 1 17
      7 1 13
      7 2 10
      7 1 6
      1 1 49
      1 2 55
      7 1 13
      4 1 41
      1 2 38
      7 1 18
      7 2 12
      7 1 9
      1 2 6
      . 2 4
      . 1 1
      1 1 40
      1 2 47
      7 2 12
      7 1 7
      . 1 4
      . 1 1
      4 1 32
      1 2 32
      7 1 10
      7 1 8
      1 1 5
      . 1 4
      . 1 1
      7 1 29
      1 2 28
      7 1 13
      . 2 4
      1 1 40
      1 2 39
      7 1 16
      1 2 6
      . 1 3
      . 1 0
      6 2 43
      4 1 70
      1 2 69
      1 2 87
      1 1 35
      1 2 34
      7 1 10
      7 1 8
      1 1 7
      1 2 5
      . 1 1
      4 1 58
      1 2 58
      7 2 11
      1 1 39
      1 2 38
      7 2 17
      7 1 13
      7 1 7
      1 2 5
      . 2 2
      4 1 27
      4 2 27
      7 1 8
      . 1 4
      . 2 2
      . 1 0
      1 1 85
      1 2 75
      15 2 24
      7 1 23
      7 1 51
      4 2 38
      7 1 15
      7 2 13
      7 1 11
      7 2 9
      . 2 4
      4 1 36
      1 2 26
      7 2 9
      4 1 41
      1 2 35
      7 1 15
      7 2 12
      7 1 10
      7 2 8
      . 1 4
      . 1 2
      . 2 0
      1 1 75
      1 2 77
      1 1 41
      1 2 37
      7 2 11
      . 2 3
      1 2 62
      4 1 42
      4 2 42
      7 1 14
      7 1 12
      7 2 9
      1 1 5
      . 1 2
      4 1 56
      1 2 54
      7 2 15
      4 1 33
      4 2 33
      7 1 8
      7 1 7
      . 1 4
      . 1 1
      4 1 41
      4 2 32
      7 1 11
      7 2 8
      1 2 6
      7 1 53
      1 2 52
      7 2 15
      7 2 14
      7 1 9
      1 2 6
      4 1 28
      5 2 27
      . 2 0
      4 1 54
      2 2 50
      7 1 22
      7 1 14
      7 1 12
      7 1 9
      2 1 57
      2 2 52
      7 1 23
      7 1 9
      end
      label values nivedu nivedu
      label def nivedu 1 "Ninguno", modify
      label def nivedu 2 "Curso de Alfebetización", modify
      label def nivedu 4 "Básico (1 a 5 Años)", modify
      label def nivedu 5 "Intermedio (1 a3 años)", modify
      label def nivedu 6 "Medio (1 a 3 años)", modify
      label def nivedu 7 "Primaria (1 a 8 años)", modify
      label def nivedu 8 "Secundaria (1 a 4 años)", modify
      label def nivedu 14 "Normal", modify
      label def nivedu 15 "Licenciatura Universidad pública", modify
      label def nivedu 19 "Técnico de instituto", modify
      label def nivedu 20 "ANAPOL o COLMIL", modify
      label values genero s1_03
      label def s1_03 1 "hombre", modify
      label def s1_03 2 "mujer", modify
      label values edad s1_04
      Thank you in advance.
      I working whit Stata 14
      Juan

      Comment


      • #4
        Ok, this is precisely the situation where I said my code would not work. You have value-labeled numeric variables.

        While I can think of a way to check whether the value labeling is the same in all ten sets, it is very cumbersome and, in truth, I don't think it's a wise approach. What will you do if they are not all encoded the same? The only sensible thing I can see would be to go back and give them all a common encoding. So I think it just makes sense to do that right from the start: it actually is simpler than attempting to verify that they are all encoded the same way, and at the end, you will have a set of compatible data sets.

        Code:
        clear
        input double(nivedu genero edad)
        22 1 64
         6 2 61
        19 2 37
         9 1 11
         1 1  4
        19 2 29
         . 2  2
         7 2 32
        10 2 15
        10 1 14
         9 2 10
         1 1  5
        23 1 69
        18 2 76
        19 1 44
         8 2 42
        10 1 22
        19 2 21
         9 1  9
         . 2  3
         6 1 50
         6 2 40
        19 2 22
        10 2 20
         . 2  3
        18 2 79
        19 2 45
        19 1 51
        10 1 20
        18 1 45
        18 2 40
         9 2 10
         3 2  7
        19 2 58
        19 2 25
        10 1 16
        19 2 88
        18 1 84
         6 2 81
        19 1 63
        25 2 44
        10 2 15
         9 2  9
        18 1 70
        18 2 68
        20 1 36
         6 2 30
         1 1  5
         1 1  4
        19 1 56
         6 2 42
        10 1 19
        10 1 18
        22 1 39
        20 2 38
        10 1 14
         9 2 11
         6 2 78
        23 1 60
        19 2 60
         6 1 53
        25 2 49
        25 1 24
        19 1 27
        18 2 29
         . 2  1
        18 2 66
        19 1 54
        19 2 36
        10 1 14
         9 1  8
        25 2 68
        19 1 80
        24 1 32
         8 2 20
         . 1  2
         . 2  0
         6 1 48
         5 2 48
         8 1 23
         7 2 17
        10 2 14
         8 2 19
         . 2  2
         4 1 35
         1 2 71
         4 2 46
        19 2 25
         5 1 45
         4 2 43
         7 1 24
         7 2 21
        10 2 20
        10 1 16
         9 1 11
         1 1 46
         1 2 47
        10 2 13
         9 1 11
         9 1  7
         . 1  3
         . 1  1
         9 2 14
         9 2 15
        10 1 21
         4 1 76
         4 2 71
        19 2 28
         1 2  4
        19 2 30
        19 1 31
         4 1 79
         8 1 29
         1 2 66
         6 2 31
         6 2 28
         5 2 36
        10 2 13
         . 2  3
         6 2 45
        19 2 20
        10 2 17
         9 2  9
         3 1  6
        19 1 27
        19 2 24
         . 1  1
        19 1 20
         6 1 34
         7 2 28
         9 1  9
         . 1  1
         . 1  0
         6 1 46
         6 2 43
        18 1 25
        18 2 22
        10 2 17
        10 1 14
        19 1 23
        15 2 28
         . 1  1
         6 2 44
        19 1 26
        19 2 24
        10 2 18
        18 1 65
        18 2 68
         4 1 66
         4 2 66
        25 1 44
         6 1 63
         6 2 60
         6 1 43
         6 2 43
        10 2 17
         9 1 15
         6 1 72
         6 2 19
        19 1 35
         8 1 32
        19 2 24
         . 2  1
        19 1 61
         6 2 42
        19 2 24
        19 1 22
        10 2 19
         7 1 17
        18 2 58
        10 2 15
        10 2 17
         . 2  0
        10 2 19
        19 1 30
        19 2 25
         1 1  5
        26 1 29
         6 1 62
         6 2 66
        19 1 50
        19 2 44
        19 1 20
        19 1 18
         9 2 14
        19 1 45
         6 2 45
        19 1 22
        19 1 20
        10 1 18
        10 1 16
        10 2 15
         5 1 59
         6 2 55
        19 1 23
         6 1 59
        19 2 57
         1 2 27
        19 1 24
         4 2 74
        end
        label values nivedu nivedu
        label def nivedu 1 "Ninguno", modify
        label def nivedu 3 "Educación pre-escolar", modify
        label def nivedu 4 "Básico (1 a 5 Años)", modify
        label def nivedu 5 "Intermedio (1 a3 años)", modify
        label def nivedu 6 "Medio (1 a 4 años)", modify
        label def nivedu 7 "Primaria (1 a 8 años)", modify
        label def nivedu 8 "Secundaria (1 a 4 años)", modify
        label def nivedu 9 "Primaria 1 a 6 años nuevo)", modify
        label def nivedu 10 " Actual-secundaria (1 a 6 años)", modify
        label def nivedu 15 "Educación secundaria de adultos (ESA)", modify
        label def nivedu 18 "Normal", modify
        label def nivedu 19 "Licenciatura Universidad pública", modify
        label def nivedu 20 "Licenciatura Universidad privada", modify
        label def nivedu 22 "Postgado-máster", modify
        label def nivedu 23 "Doctorado", modify
        label def nivedu 24 "Técnico de Universidad", modify
        label def nivedu 25 "Técnico de instituto>=1 año", modify
        label def nivedu 26 "ANAPOL o COLMIL", modify
        label values genero s2a_02
        label def s2a_02 1 "Hombre", modify
        label def s2a_02 2 "Mujer", modify
        tempfile data2014
        save `data2014'
        
        clear
        input double(nivedu genero edad)
        1 1 67
        4 1 35
        5 2 34
        7 1 8
        . 1 2
        1 1 69
        20 1 83
        19 2 81
        1 2 75
        6 2 30
        . 2 4
        . 1 0
        1 1 69
        1 2 68
        4 1 39
        4 2 40
        5 1 46
        4 2 49
        7 2 10
        1 2 62
        4 2 57
        7 1 14
        . 1 4
        14 2 55
        14 1 47
        14 2 46
        5 1 48
        1 2 49
        . 2 2
        7 1 60
        1 2 66
        4 1 35
        4 2 36
        7 1 12
        7 1 11
        7 1 66
        1 2 60
        8 1 22
        7 2 19
        . 1 0
        1 2 81
        5 1 38
        1 2 38
        1 2 86
        2 1 67
        2 2 67
        5 1 40
        4 2 39
        7 2 15
        7 2 14
        7 2 11
        4 1 48
        4 2 41
        7 1 16
        7 1 12
        7 2 9
        7 2 7
        . 1 1
        7 1 15
        7 2 11
        7 2 9
        7 2 6
        1 1 63
        6 1 48
        4 2 47
        8 1 17
        7 1 13
        7 2 10
        7 1 6
        1 1 49
        1 2 55
        7 1 13
        4 1 41
        1 2 38
        7 1 18
        7 2 12
        7 1 9
        1 2 6
        . 2 4
        . 1 1
        1 1 40
        1 2 47
        7 2 12
        7 1 7
        . 1 4
        . 1 1
        4 1 32
        1 2 32
        7 1 10
        7 1 8
        1 1 5
        . 1 4
        . 1 1
        7 1 29
        1 2 28
        7 1 13
        . 2 4
        1 1 40
        1 2 39
        7 1 16
        1 2 6
        . 1 3
        . 1 0
        6 2 43
        4 1 70
        1 2 69
        1 2 87
        1 1 35
        1 2 34
        7 1 10
        7 1 8
        1 1 7
        1 2 5
        . 1 1
        4 1 58
        1 2 58
        7 2 11
        1 1 39
        1 2 38
        7 2 17
        7 1 13
        7 1 7
        1 2 5
        . 2 2
        4 1 27
        4 2 27
        7 1 8
        . 1 4
        . 2 2
        . 1 0
        1 1 85
        1 2 75
        15 2 24
        7 1 23
        7 1 51
        4 2 38
        7 1 15
        7 2 13
        7 1 11
        7 2 9
        . 2 4
        4 1 36
        1 2 26
        7 2 9
        4 1 41
        1 2 35
        7 1 15
        7 2 12
        7 1 10
        7 2 8
        . 1 4
        . 1 2
        . 2 0
        1 1 75
        1 2 77
        1 1 41
        1 2 37
        7 2 11
        . 2 3
        1 2 62
        4 1 42
        4 2 42
        7 1 14
        7 1 12
        7 2 9
        1 1 5
        . 1 2
        4 1 56
        1 2 54
        7 2 15
        4 1 33
        4 2 33
        7 1 8
        7 1 7
        . 1 4
        . 1 1
        4 1 41
        4 2 32
        7 1 11
        7 2 8
        1 2 6
        7 1 53
        1 2 52
        7 2 15
        7 2 14
        7 1 9
        1 2 6
        4 1 28
        5 2 27
        . 2 0
        4 1 54
        2 2 50
        7 1 22
        7 1 14
        7 1 12
        7 1 9
        2 1 57
        2 2 52
        7 1 23
        7 1 9
        end
        label values nivedu nivedu
        label def nivedu 1 "Ninguno", modify
        label def nivedu 2 "Curso de Alfebetización", modify
        label def nivedu 4 "Básico (1 a 5 Años)", modify
        label def nivedu 5 "Intermedio (1 a3 años)", modify
        label def nivedu 6 "Medio (1 a 3 años)", modify
        label def nivedu 7 "Primaria (1 a 8 años)", modify
        label def nivedu 8 "Secundaria (1 a 4 años)", modify
        label def nivedu 14 "Normal", modify
        label def nivedu 15 "Licenciatura Universidad pública", modify
        label def nivedu 19 "Técnico de instituto", modify
        label def nivedu 20 "ANAPOL o COLMIL", modify
        label values genero s1_03
        label def s1_03 1 "hombre", modify
        label def s1_03 2 "mujer", modify
        label values edad s1_04
        tempfile data2007
        save `data2007'
        
        local years 2007 2014
        
        //    CREATE DECODED VALUES OF VARIABLE nivedu FROM ALL THE DATA SETS
        clear
        tempfile nivedu_values
        save `nivedu_values', emptyok
        foreach y of local years {
            use nivedu using `"`data`y''"', clear
            decode nivedu, gen(_nivedu)
            drop nivedu
            label drop nivedu
            append using `nivedu_values'
            save `"`nivedu_values'"', replace
        }
        duplicates drop
        encode _nivedu, gen(nivedu)
        tempfile labeler
        label save nivedu using `labeler'
        type `labeler' // THIS IS A COMMON LABEL THAT WILL WORK FOR ALL DATA SETS
        
        //    NOW GO BACK AND RE-CREATE NIVEDU USING THE COMMON LABEL
        foreach y of local years {
            use `"`data`y''"', clear
            decode nivedu, gen(_nivedu)
            drop nivedu
            label drop nivedu
            run `labeler'
            encode _nivedu, gen(nivedu) label(nivedu)
            drop _nivedu
            tempfile new_data_`y'
            save `"`new_data_`y''"', replace
        }
        The first block of code reads in the variable nivedu from each file, decodes it back to a string variable, and then saves all those string values in a temporary file `nivedu_values' that it builds up. Once all the files have been dealt with, a new label that covers all of the possible string values of nivedu is created and is saved in a temporary file `labeler'.

        Then we go back and loop over all the files again, reading them in, decoding nivedu back to string, and then encoding those string values using the label that was saved in `labeler', thereby creating a new nivedu variable. These data are now saved in new files indexed by their year. (It is usually not a good idea to overwrite the original data files, which is why I create new files now.)

        Note that I am using tempfiles everywhere in this code. But you can use permanent Stata files if you prefer and find it simpler, especially the new_data_`y' files at the end. I just don't want to clutter up my file system with a lot of intermediate files.

        The resulting new_data_* files will all have nivedu as a value-labeled numeric variable, and all will have the same labeling for it.

        Comment


        • #5
          I like Clyde's solution better, but since I already wrote this up...
          The following creates a dataset of labels for all years that you can easily look at to see if there are differences:


          Code:
          foreach y of numlist 2006/2017 {
              use `y'.dta
              keep nivedu
              uselabel , clear
              foreach var of varlist _all {
                  rename `var' `var'`y'
                  }
              gen index= lname`y' + string(value`y')
              save lab`y'.dta, replace
              }
          clear
          use lab2006.dta
          foreach y of numlist 2007/2017 {
              merge 1:1 index using lab`y'.dta
              drop _merge
              }
          reshape long lname value label trunc, i(index) j(year)
          sort lname value year
          list, sepby(lname value)
          Last edited by Carole J. Wilson; 21 Jan 2019, 12:25. Reason: Added the part in orange so that the dataset only contains labels from nivedu
          Stata/MP 14.1 (64-bit x86-64)
          Revision 19 May 2016
          Win 8.1

          Comment


          • #6
            Hello, Clyde and Carole.
            Many thank's both of you if were are close I would give them a big hug.
            Clyde, I agree to you, compare label it's very cumbersome, but the idea was planted and your code teach the entire global focus on how to programming think.
            I'm not a programmer and think this type of solutions it's heavy for me.
            Both solutions are interesting and good. 1000 thanks.

            Comment

            Working...
            X