In a lag analysis, the frequencies of various events that follow a target or criterion event are tallied according to the ordinal position of each event observed following the target event. For behavior analysts, lag analysis is most useful for detecting regular patterns of contingent events, since reinforcers and punishers can be both identified and evaluated by their effects on antecedent and consequent behaviors. Once contingent events have been identified it is of considerable interest to detect extended sequences of particular events or classes of events. This article describes two FORTRAN programs that can facilitate the analysis of observational data: One, JOINT, computes the simple frequencies of events and provides a lag-sequential analysis; the other, SEQU, detects predefined sequences of events. Sackett, Holm, Crowley, and Henkins (1979) have recently described a FORTRAN program, LAGS, that performs lag-sequential analysis on behavioral interaction data, and they have addressed a number of theoretical issues involved in coding observational data and in applying inferential statistics to those data. JOINT shares many common features with LAGS and is offered here only as an alternative. There are two major differences between the two programs, nonetheless. First, in JOINT, all behaviors serve as the target behaviors in the lag analysis, whereas in LAGS only one target can be specified at a time. Second, in JOINT, the maximum lag allowed is 10, whereas LAGS can handle lags of up to 800. These two differences seem to result because JOINT passes through the data only once, but LAGS passes through the data separately for each target behavior. Thus, one program requires no a priori decisions about target behaviors, and the other allows a more extended lag analysis. Program Input. The input to both JOINT and SEQU is in two parts, or meso The first me, a control file, provides a general title, the numerical codes that represent the behaviors and alphanumeric labels for each, the lags to be analyzed, and an optional format statement for reading the second me, the data file. If any of the numerical codes represent more than one behavior that is coded in the data, the recoding information is given here. The second me, the data file, begins with a line of identifying information for the session and, in sequence, the numerical codes for each behavior recorded during the session. A unique code marks the end of the session, and another code marks the end of the set of sessions to be analyzed. JOINT accepts observational data that consist of up to 80 different codes, each code being a number that represents a particular behavior. At the user's option, codes may be assigned that represent the occurrence of any I of up to 80 other uniquely coded behaviors. Thus, the raw data may comprise many codes, but the program can analyze only 80 codes at a time. Memory limitations on some computers may require program modifications that will reduce the number of codes per analysis to 20 or 40. The data to be analyzed may be drawn from a single session or may be combined across as many as 50 different sessions. The number of behaviors recorded in a session is limited by only the largest integer value the computer can store, a value usually so large as to pose no practical problems. Program Output: JOINT. JOINT computes simple frequencies and probabilities and rates for each of the codes defined in the control file. JOINT also computes joint frequencies, conditional probabilities, z scores, and rates for the codes with lags from I to 10. The lag analysis is printed in matrix form, with the entire set of codes comprising both the row (R) and column (C) behaviors. For a lag of 1, the joint frequency of Rand C, f(R & C), is the number of times Behavior C occurred immediately after Behavior R occurred. For a lag of 2, of course, feR & C) is the number of times C was the second behavior recorded after R occurred, and so on. The conditional probability, p(C/R), is the probability of the C behavior, given that the R behavior was occurring in a preceding time frame. The conditional probability of a particular Rand C is obtained by dividing feR & C) by f(R). The rate of each behavior is calculated simply from the duration of the observation periods. Likewise, the rate of each joint frequency is given, that is, the rate at which a C behavior followed an R behavior at each lag. The z scores indicate the extent to which an observed joint frequency deviated from the joint frequency that would occur if Behavior Rand Behavior C were independent of each other. Assuming independence (or only chance association), the expected