### sas >> Converting Latitude/Longitude (decimal degrees) to Bearing?

Does someone have a formula to convert the lat and lon from two
locations (A and B) to bearings (location B relative to location A)?

### sas >> Converting Latitude/Longitude (decimal degrees) to Bearing?

Hi,

Here are some posts to get you started:

http://listserv.uga.edu/cgi-bin/wa?A2=ind0605D&L=sas-l&P=R6483

http://listserv.uga.edu/cgi-bin/wa?A2=ind0511C&L=sas-l&P=R32434

Mark Terjeson
Senior Programmer Analyst, IM&R
Russell Investments
253-439-2367

Russell
Global Leaders in Multi-Manager Investing

-----Original Message-----
From: SAS(r) Discussion [mailto: XXXX@XXXXX.COM ] On Behalf Of
XXXX@XXXXX.COM
Sent: Tuesday, June 12, 2007 1:53 PM
To: XXXX@XXXXX.COM
Subject: Converting Latitude/Longitude (decimal degrees) to Bearing?

Does someone have a formula to convert the lat and lon from two
locations (A and B) to bearings (location B relative to location A)?

### sas >> Converting Latitude/Longitude (decimal degrees) to Bearing?

Hi

Here's a little SAS example to calculate both the bearing and the
distance between two points. It's a bit long-winded for illustration
purposes. I got a lot of help from this web site:

http://www.movable-type.co.uk/scripts/latlong.html

There are two different distance calculation techniques used and either
works for me. I don't claim to understand how any of this works; I just
have this in my SAS toolbox. There are many online discussions out
there if you're interested. It seems to depend on the degree of
accuracy you need. And if you need distance in kilometers, change the
earth radius constant to kilometers (see the comment).

Hope this helps; the code follows.

Bob

data SAMPLE_TABLE1(keep=deg_lat1 deg_lon1 deg_lat2 deg_lon2 distance1
distance2
deg_bearing bearing_txt);
if _n_ = 1 then do;
/* Define Pi and the Radius of the Earth as constants */
Pi = constant('pi'); /* Use the SAS function to improve precision
*/
* REarth = 6367; /* Kilometers */
REarth = 3956.2704; /* Miles */
end;
retain Pi REarth;

/* First point */
deg_lon1 = -81.2238;
deg_lat1 = 35.25927;

/* Second point */
deg_lon2 = -81.1492;
deg_lat2 = 35.22143;

/* First convert degrees to radians */
rad_lon1 = deg_lon1 * pi / 180;
rad_lat1 = deg_lat1 * pi / 180;
rad_lon2 = deg_lon2 * pi / 180;
rad_lat2 = deg_lat2 * pi / 180;

/* Law of Cosines for Spherical Trigonometry (uses radius) */
distance1 = REarth * arcos( ( cos(rad_lat1) * cos(rad_lat2) *
+ ( sin(rad_lat1) * sin(rad_lat2) ) );
/* Haversine Formula (uses diameter) */
A = sin( (rad_lat2 - rad_lat1)/2.0 )**2
distance2 = (REarth * 2) * atan2(sqrt(A),sqrt(1-A));

/* Calculate bearing */

_lon2)), 2*Pi);

/* Convert bearing to degrees and create display variable as
degrees-minutes-seconds */
deg_Bearing = rad_Bearing * 180 / Pi;

Degrees = Int(abs(deg_Bearing));
Minutes = (abs(deg_Bearing) - Degrees) * 60;
Seconds = round((Minutes - Int(Minutes)) * 60);
Bearing_txt = put(degrees,3.) || 'B0'x || put(minutes,2.) || "'" ||
put(seconds,2.) || '"';
run;

-----Original Message-----
From: SAS(r) Discussion [mailto: XXXX@XXXXX.COM ] On Behalf Of
XXXX@XXXXX.COM
Sent: Tuesday, June 12, 2007 1:53 PM
To: XXXX@XXXXX.COM
Subject: Converting Latitude/Longitude (decimal degrees) to Bearing?

Does someone have a formula to convert the lat and lon from two
locations (A and B) to bearings (location B relative to location A)?

### sas >> Converting Latitude/Longitude (decimal degrees) to Bearing?

XXXX@XXXXX.COM replied:

Good code is always appreciated. I don't think it is too long for SAS-L.

It's basic spherical trigonometry. Behavior of polygons on spherical
surfaces. Of course, it's approximate, since the earth is not really
spherical, but it's a pretty darn good approximation in most cases.

HTH,
David
_________________________________________________________________
Get a preview of Live Earth, the hottest event this summer - only on MSN
http://liveearth.msn.com ?source=msntaglineliveearthhm

### sas >> Converting Latitude/Longitude (decimal degrees) to Bearing?

n Jun 13, 8:51 pm, XXXX@XXXXX.COM (David L Cassell) wrote:

Mark, Bob, and David-
Thank you all for you input and advice. i was able to utilize all your
input to make my calculation. I appreciate you all taking the time to
respond.

Aaron

```On 4/29/08, Guibo Xing < XXXX@XXXXX.COM > wrote:
> Hi all,
>
> when i convert a numeric value to character. i did not get what I want.
> For example, when OR is a numberic with length 8, e.g. 1.10, i use
> ORC=put(left(or), 4.), then i get ORC=1.1 without the 0 at the end. Can
> anybody help ? Thanks in advance.

ORC=put(or, 4.2 -L )?

Might be worth your while to take 1 minute to read the entry for the
PUT function in the online docs.  Not only will you get useful
information, but links to similar funcitons.
```

```Hello,
I have a text file with the format as (values seperated by vertical
bars | ):

line 1  |     0.42  |    1.28  |   4.62 |    2.11 |

data perc;
infile outtxt pad lrecl=100;
array percent[4]  percent1-percent4;
input lines \$char100.;
do i=2 to 5;
percent[i-1]=input(scan(lines, i, '|'), 5.2);
end;
run;

My question is why the values for percent1-percent4 become: 0  0.01
0.04 0.02 ?
Thank you for your help!

Yvonne

```

```Hi experts,

I run the program in SAS environment against DataMart in Data Warehouse.

For some reason the fragment of code below failed. I have no idea why it generated the error message at the bottom.

What is invalid character in the character string argument of the function?

Actually res_val field is a character type field. I am trying to convert it to numeric and to set 999 to all invalid values.

Actually the value can be with decimal point either like 120.5. Probably INTEGER is not good anyway....

Could you please give me a hand?

This is what my log gave me
*********************************************************************************

1391       EXECUTE(
1392           declare global temporary table qsrv
1393                    (   Id               char    (29)
1394                      , First_Srv_Dt     date
1395                      , rslt_cd          char     (13)
1396                      , res_val          char     (18)
1397                      , Num_Res_Val      smallint
1398                    )
1399           in "&sestblspc"
1400           on commit preserve rows not logged
1401       ) by HDMconnect;
1402
1403       EXECUTE(
1404           insert into session.qsrv
1405           select qu.Id
1406                , qu.dos
1407                , qu.rslt_cd
1408                , qu.res_val,
1409
1410          CASE
1411          WHEN qu.res_val='Invalid' OR
1412
1417               qu.lr_res_val= ' '
1418          THEN 999
1419          ELSE INTEGER(qu.res_val)
1420          END AS Num_Res_Val
1421             from &clmschema..v_l_data     qu
1422             join &tmpschema..num          np
1423               on qu.Id               = np.Id
1424
1425       ) by mYconnect;
ERROR: CLI execute error: [IBM][CLI Driver][DB2/AIX64] SQL0420N  Invalid character found in a
character string argument of the function "INTEGER".  SQLSTATE=22018
********************************************************************************************

Actually I know that in SAS syntax it would be smth like that:

data base_ (drop =_:);
set  base (rename=(res_val=_res_val));
res_val=input(_res_val, 5.);
run;

********************************************************************
But I have beaten my head trying to incorporate  it in SQL syntax.

Thank You in advance,

Irin

---------------------------------
Yahoo! Music Unlimited - Access over 1 million songs. Try it free.
```