2016-08-19 3 views
0

Я хочу сравнить строковое значение A и B с помощью функции индекса. Я хочу проверить, содержит ли A B в своем столбце. Единственный способ, которым я знаю, как это сделать, - Индекс, но проблема в индексе не позволяет указывать имя столбца в его параметрах. Вы должны ввести строковое значение.SAS Help: Использование функции индекса для сравнения 2 столбца

Пробовал это: index(Address, HouseNumber)>0 но он не работает.

Пример:

Address  HouseNumber  
123 Road  Road 

Так что я хочу увидеть, если адрес столбец содержит числовое значение дома в своей области. Это не будет прямое совпадение, а просто нужно проверить, содержит ли A строку. Я думаю, что использование макропеременной или массива является решением, но я не знаю, как это сделать.

+1

Я думаю, что у вас есть ваш ответ ниже в разделе Tom's, но ваш вопрос получит гораздо лучший ответ, если вы добавите код для репликации своей проблемы в качестве полного шага данных. – Joe

ответ

3

Вам необходимо учитывать заполнение, которое SAS делает, поскольку все переменные являются фиксированной длиной.

data have ; 
    length Address HouseNumber $50; 
    infile cards dsd dlm='|'; 
    input address housenumber ; 
cards; 
123 Road|Road 
;;;; 

data want ; 
    set have ; 
    if index(address,strip(HouseNumber)); 
run; 
+0

'FIND()' имеет модификатор '' t', который будет выполнять обрезку для вас, при условии, что он обрезает оба поля. – Joe

+0

Этот комментарий спас мне жизнь. Мне было интересно, почему индекс не работал. Я добавил strip(), и он работает! – Paula

0

Это работает - это то, что вы пытаетесь сделать?

data _null_; 
    a = '52 Festive Rd'; 
    b = 'Festive'; 
    if index(a,b) then put 'yes'; 
    else put 'no'; 
run; 
+0

Чтобы увидеть проблему, добавьте пробелы в конец значения B. Либо включив их в строковый литерал, либо задав длину до назначения более 7 символов. – Tom

+0

Yup, но пришлось добавить полосу(). Я пробовал это раньше, но не дал результатов, даже если обе строки одинаковы. Благодаря! – Paula