Исключение значений из функции inrange () - PullRequest
3 голосов
/ 08 мая 2019

Я хочу знать, как я могу исключить число из inrange().

Например, если у меня есть переменная A:

1,2,3,4,5,6,7,8,9,10

Я бы хотел исключить5 из inrange(A,2,8) для получения следующего:

2,3,4,7,8

Ответы [ 2 ]

3 голосов
/ 08 мая 2019

Вы также можете объединить inlist() и inrange():

clear
set obs 10

generate A = _n
generate B = A if inrange(A, 2, 8)
generate C = A if inrange(A, 2, 8) & !inlist(A, 2, 5)

list

     +------------+
     |  A   B   C |
     |------------|
  1. |  1   .   . |
  2. |  2   2   . |
  3. |  3   3   3 |
  4. |  4   4   4 |
  5. |  5   5   . |
     |------------|
  6. |  6   6   6 |
  7. |  7   7   7 |
  8. |  8   8   8 |
  9. |  9   .   . |
 10. | 10   .   . |
     +------------+

Это будет полезно, если вы хотите исключить более одного значения.

2 голосов
/ 08 мая 2019

inrange() - это функция, а не команда. Нет скрытого синтаксиса для указания исключений. Если вы хотите от 2 до 8, но не 5, есть много способов сделать это, например

if inrange(A, 2, 4) | inrange(A, 6, 8) 

if inrange(A, 2, 8) & A != 5 

if inlist(A, 2, 3, 4, 6, 7, 8) 

Синтаксис выше не предназначен для отображения полных команд. Я принимаю это как молчаливый в вопросе, что значения всегда целочисленные.

...