Sas 从SVG路径语法中提取坐标
*标题可能具有误导性 我有(列)单元格值,如下所示:Sas 从SVG路径语法中提取坐标,sas,cell,separator,Sas,Cell,Separator,*标题可能具有误导性 我有(列)单元格值,如下所示: 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-orgin,y-orgin,x和y值分成四列。(我对sas比较陌生……我认为这些是笛卡尔坐标) 我该怎么做呢?使用scan功
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-orgin,y-orgin,x和y值分成四列。(我对sas比较陌生……我认为这些是笛卡尔坐标)
我该怎么做呢?使用
scan
功能。它用于选择字符串的第n个字。第一个参数是要解析的字符串,第二个参数是单词(1st、2nd等),第三个参数列出分隔符(分隔单词的字符)。这就是你所需要的
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;
使用
scan
功能。它用于选择字符串的第n个字。第一个参数是要解析的字符串,第二个参数是单词(1st、2nd等),第三个参数列出分隔符(分隔单词的字符)。这就是你所需要的
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;
您有一个名为d的变量的SAS数据集,还是有一个文本文件?我第一次读到的是,您已经有了一个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;
您有一个名为d的变量的SAS数据集,还是有一个文本文件?我第一次读到的是,您已经有了一个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;
也许更好的标题是“从SVG路径语法提取坐标”。在SVG的上下文中,每个
d
值描述一行M
将指针移动到第一个位置,并且L
定义从第一个位置到第二个位置的行。由于命令大写,坐标是绝对坐标而不是相对坐标。如果您感兴趣,您可以阅读更多或更多。感谢SRSwift-标题已按建议更改。也许更好的标题是“从SVG路径语法提取坐标”。在SVG的上下文中,每个d
值描述一行M
将指针移动到第一个位置,并且L
定义从第一个位置到第二个位置的行。由于命令大写,坐标是绝对坐标而不是相对坐标。如果您感兴趣,您可以阅读更多或更多。谢谢SRSwift-标题已按建议更改。