2015-03-06 7 views
1

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

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

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

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

Как бы я это сделал?

+0

Возможно, лучшим заголовком будет «Извлечение координат из синтаксиса пути SVG». В контексте SVG каждый из ваших значений 'd' описывает строку; 'M' перемещает указатель на первое место, а' L' определяет линию от первого местоположения до второго. Когда команды капитализируются, координаты являются абсолютными, а не относительными. Если вас это интересует, вы можете прочитать больше [здесь] (https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/d) или [здесь] (http://www.w3.org /TR/SVG/paths.html#PathDataMovetoCommands). – SRSwift

+0

спасибо SRSwift- Название было изменено, как было предложено. – Ankit

ответ

4

Используйте функцию 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; 
+0

Спасибо DWal- отлично работает – Ankit

2

У вас есть набор данных 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; 
+0

Спасибо Quentin- Ваше решение также работает – Ankit

Смежные вопросы