Извлечение координат из синтаксиса пути SVG

*заголовок может ввести в заблуждение

У меня есть (столбец) значения ячеек следующим образом:

d="M200,170L149,385"
d="M200,170L150,387" 
d="M200,170L275,384" 
d="M200,170L49,317" 
d="M200,170L92,347" 

Значения 200 и 170 в каждой ячейке представляют исходные точки x и y соответственно, а второй набор значений (например, 149 и 385) представляет значения x и y. Я хочу разделить значения x-org, y-org, x и y на четыре столбца. (Я относительно новичок в sas... Я думаю, что это декартовы координаты)

Как мне это сделать?


person Ankit    schedule 06.03.2015    source источник
comment
Возможно, лучшим названием было бы «Извлечение координат из синтаксиса пути SVG». В контексте SVG каждое из ваших значений d описывает строку; M перемещает указатель в первое место, а L определяет линию от первого места ко второму. Поскольку команды пишутся с большой буквы, координаты являются абсолютными, а не относительными. Если вы заинтересованы, вы можете прочитать больше здесь или здесь.   -  person SRSwift    schedule 06.03.2015
comment
спасибо SRSwift. Название было изменено, как было предложено.   -  person Ankit    schedule 10.03.2015


Ответы (2)


Используйте функцию scan. Он используется для выбора n-го слова строки. Первый аргумент — это строка, которую вы хотите проанализировать, второй — слово (1-е, 2-е и т. д.), а третий — список ваших разделителей (символов, разделяющих слова). Это должно быть все, что вам нужно.

data want;
  set have;
  origx = scan(d,1,'M,L');
  origy = scan(d,2,'M,L');
  x     = scan(d,3,'M,L');
  y     = scan(d,4,'M,L');
run;
person DWal    schedule 06.03.2015

У вас есть набор данных SAS с переменной с именем d или текстовый файл? Мое первое чтение заключалось в том, что у вас уже есть набор данных SAS, и в этом случае вам нужно проанализировать переменную. Вы можете использовать функцию SCAN() или множество других методов, например:

data have;
  input d $16.;
  cards;
M200,170L149,385
M200,170L150,387 
M200,170L275,384 
M200,170L49,317 
M200,170L92,347 
;
run;

data want;
  set have;
  x_origin=scan(d,1,"M,L");
  y_origin=scan(d,2,"M,L");
  x=scan(d,3,"M,L");
  y=scan(d,4,"M,L");
run;

proc print data=want;
run;
person Quentin    schedule 06.03.2015