如何在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 数据转换为弧度,然后就不必再担心了。