如何在SAS中切换弧度和度数
How to switch between radians and degrees in SAS
只是在寻找一种简单的方法来 运行 在 SAS 中触发函数,而无需在每次计算中手动更正。以下是我正在使用的内容。
我可能 运行在 SAS 9 中解决这个问题,SAS Studio 学生模块,但这是一个一般的 SAS 问题。
我在 'calc' 数据步骤中手动创建了一个变量 'rad' 来处理这个问题,但它增加了一个我想避免的复杂步骤。
请问是否有系统设置、备用触发功能或...?这将改变计算:
bh_x = cos(rad*bh_a)*bh_l ;
到:
bh_x = cos(bh_a)*bh_l ;
所以我不必手动将我的角度(以度为单位)转换为弧度,三角函数就可以工作。
感谢所有阅读本文并为解决方案付出心力的人!
蒂姆
data spec ;
length
b2h_a 8
b2h_l 8
b2h_l_e 8
bike $ 8
name $ 16
;
input
bike $
name $
bh_a
bh_l
ht_a
spcr
st_h
st_a
st_l
hb_r
hb_a
;
datalines ;
srcn (0,0) 0 0 67 0 0 0 0 0 0
srcn c 41 658 71.5 27 40 25 120 100 13
srcn ne_27_n13 41 658 71.5 27 40 27 127 100 13
srcn ne_15_0 41 658 71.5 15 40 27 127 100 0
srcn ne_5_0 41 658 71.5 5 40 27 127 100 0
srcn ne_2_n9 41 658 71.5 2 40 27 127 100 9
srcn ne_5_10 41 658 71.5 5 40 27 127 100 -10
srcn ne_10_rf10 41 658 71.5 10 40 27 127 20 -10
srcn max 41 658 90 250 0 0 250 0 0
;
run ;
data calc ;
set spec ;
pi=constant('pi') ;
rad=pi/180 ;
bh_x = cos(rad*bh_a)*bh_l ;
bh_y = sin(rad*bh_a)*bh_l ;
sr_x = (cos(rad*ht_a)*(spcr+st_h/2))*-1 ;
sr_y = sin(rad*ht_a)*(spcr+st_h/2);
st_x = cos(rad*(90-ht_a+st_a))*st_l ;
st_y = sin(rad*(90-ht_a+st_a))*st_l ;
hb_x = cos(rad*(90-hb_a))*hb_r*-1 ;
hb_y = sin(rad*(90-hb_a))*hb_r ;
hd_x = bh_x + sr_x + st_x + hb_x ;
hd_y = bh_y + sr_y + st_y + hb_y ;
if hd_x=0 then do ;
b2h_a=0 ;
b2h_l=0 ;
end ;
else do ;
b2h_a = atan(hd_y/hd_x)/rad ;
b2h_l = hd_y/sin(b2h_a*rad) ;
end ;
b2h_l_e = b2h_l/25.4 ;
drop pi rad ;
format
b2h_a 5.
b2h_l 5.
b2h_l_e 5.
bh_a 5.
bh_l 5.
ht_a 5.
spcr 5.
st_h 5.
st_a 5.
st_l 5.
hb_r 5.
hb_a 5.
bh_x 5.
bh_y 5.
sr_x 5.
sr_y 5.
st_x 5.
st_y 5.
hb_x 5.
hb_y 5.
hd_x 5.
hd_y 5.
b2h_a 5.
b2h_l 5.
b2h_l_e 5.1
;
run ;
SAS 中没有接受 DEGREE 或 GRADIAN 参数的三角函数。您始终需要将数据的 angular 测量系统转换为 RADIAN。
您可以编写宏来执行转换。示例:
%macro cosD(theta);
%* theta is angle in degrees;
%* emit data step source code that performs conversion from degrees to radians;
cos(&theta*constant('PI')/180)
%mend;
正在使用:
data calc ;
set spec ;
bh_x = %cosD(bh_a) * bh_l ;
您可以在发生 input
的步骤中将 angular 数据转换为弧度,然后就不必再担心了。
只是在寻找一种简单的方法来 运行 在 SAS 中触发函数,而无需在每次计算中手动更正。以下是我正在使用的内容。
我可能 运行在 SAS 9 中解决这个问题,SAS Studio 学生模块,但这是一个一般的 SAS 问题。
我在 'calc' 数据步骤中手动创建了一个变量 'rad' 来处理这个问题,但它增加了一个我想避免的复杂步骤。
请问是否有系统设置、备用触发功能或...?这将改变计算:
bh_x = cos(rad*bh_a)*bh_l ;
到:
bh_x = cos(bh_a)*bh_l ;
所以我不必手动将我的角度(以度为单位)转换为弧度,三角函数就可以工作。
感谢所有阅读本文并为解决方案付出心力的人! 蒂姆
data spec ;
length
b2h_a 8
b2h_l 8
b2h_l_e 8
bike $ 8
name $ 16
;
input
bike $
name $
bh_a
bh_l
ht_a
spcr
st_h
st_a
st_l
hb_r
hb_a
;
datalines ;
srcn (0,0) 0 0 67 0 0 0 0 0 0
srcn c 41 658 71.5 27 40 25 120 100 13
srcn ne_27_n13 41 658 71.5 27 40 27 127 100 13
srcn ne_15_0 41 658 71.5 15 40 27 127 100 0
srcn ne_5_0 41 658 71.5 5 40 27 127 100 0
srcn ne_2_n9 41 658 71.5 2 40 27 127 100 9
srcn ne_5_10 41 658 71.5 5 40 27 127 100 -10
srcn ne_10_rf10 41 658 71.5 10 40 27 127 20 -10
srcn max 41 658 90 250 0 0 250 0 0
;
run ;
data calc ;
set spec ;
pi=constant('pi') ;
rad=pi/180 ;
bh_x = cos(rad*bh_a)*bh_l ;
bh_y = sin(rad*bh_a)*bh_l ;
sr_x = (cos(rad*ht_a)*(spcr+st_h/2))*-1 ;
sr_y = sin(rad*ht_a)*(spcr+st_h/2);
st_x = cos(rad*(90-ht_a+st_a))*st_l ;
st_y = sin(rad*(90-ht_a+st_a))*st_l ;
hb_x = cos(rad*(90-hb_a))*hb_r*-1 ;
hb_y = sin(rad*(90-hb_a))*hb_r ;
hd_x = bh_x + sr_x + st_x + hb_x ;
hd_y = bh_y + sr_y + st_y + hb_y ;
if hd_x=0 then do ;
b2h_a=0 ;
b2h_l=0 ;
end ;
else do ;
b2h_a = atan(hd_y/hd_x)/rad ;
b2h_l = hd_y/sin(b2h_a*rad) ;
end ;
b2h_l_e = b2h_l/25.4 ;
drop pi rad ;
format
b2h_a 5.
b2h_l 5.
b2h_l_e 5.
bh_a 5.
bh_l 5.
ht_a 5.
spcr 5.
st_h 5.
st_a 5.
st_l 5.
hb_r 5.
hb_a 5.
bh_x 5.
bh_y 5.
sr_x 5.
sr_y 5.
st_x 5.
st_y 5.
hb_x 5.
hb_y 5.
hd_x 5.
hd_y 5.
b2h_a 5.
b2h_l 5.
b2h_l_e 5.1
;
run ;
SAS 中没有接受 DEGREE 或 GRADIAN 参数的三角函数。您始终需要将数据的 angular 测量系统转换为 RADIAN。
您可以编写宏来执行转换。示例:
%macro cosD(theta);
%* theta is angle in degrees;
%* emit data step source code that performs conversion from degrees to radians;
cos(&theta*constant('PI')/180)
%mend;
正在使用:
data calc ;
set spec ;
bh_x = %cosD(bh_a) * bh_l ;
您可以在发生 input
的步骤中将 angular 数据转换为弧度,然后就不必再担心了。