Why can’t air traffic control radars determine the altitudes of primary targets? There are two types of returns that show up on an air traffic controller’s radar screen:


Secondary returns are not, strictly-speaking, radar “returns” at all, but, rather, signals automatically broadcast from an aircraft’s transponder, containing encoded location, altitude, airspeed, identification, flightplan, aircraft type, etc., data retrieved from the aircraft’s onboard instruments.  These are highly valuable, but, obviously, can only be used with aircraft equipped with a functional transponder which have said transponder turned on and transmitting non-bogus data.
Primary returns, in contrast, are true radar returns – direct reflections of the radar’s beam from the surface of an aircraft, bird, cloud, piece of debris, missile, tree, UFO, balloon, hailstone, or whatever else happens to be in the air at that moment.  As they merely require that an object be located where the radar beam can reach it, they are of great use in tracking aircraft with nonfunctional transponders (due to, for instance, a general electrical failure or simply a faulty transponder), aircraft in combat zones (for whom broadcasting an identification signal would be a great way to get shot down), pieces of aircraft, flocks of birds, or whatever other non-transponder-equipped objects one has a desire to track.


One common limitation given for primary radar returns is that they provide no altitude information, but only positional information.  But this makes no sense, as determining the position of a target requires knowing its elevation angle, azimuth, and distance relative to the radar installation (without knowing the target’s distance, it could be located anywhere along a line extending from the radar’s location out to infinity; without knowing its elevation angle, it could be located [within the altitude limitations of the object generating the target] anywhere along a circular arc extending from the horizon to the zenith at the specified distance from the radar; without knowing its azimuth, it could be located anywhere along a horizontal circle centered in the sky directly above the radar), and, if the elevation angle, azimuth, and distance of the target are all known, that also pins down the target’s altitude – not just its location.  Besides, military radars can and do provide altitude information for primary targets (they would be useless otherwise, as intercepting an enemy aircraft requires knowing both its position and its altitude, and enemy aircraft are unlikely to oblige a radar’s request to provide a transponder beacon signal that would aid immensely in shooting them down), which has proven valuable numerous times; for instance, the accident investigation that eventually produced the NTSB’s very first AAR used data from a military air-defence radar to determine that a 727 that crashed into Lake Michigan had descended steadily into the water without levelling off, instead of suffering an uncontrolled excursion from level flight, while, more recently, primary returns received at several military radar sites in Massachusetts showed that EgyptAir Flight 990 pulled out of its initial dive before making a second and final plunge.

So what prevents civilian ATC radars from displaying altitude information for primary targets?
without knowing its elevation angle, it could be located anywhere along a circular arc extending from the horizon to the zenith at the specified distance from the radar


Well, not quite.  Aircraft are generally much more restricted in their vertical positioning.  If there's a return from 30 miles away, that aircraft can't be overhead.  (And radars normally have a maximum elevation to the beam, often around 70 degrees).  

This document suggests that (at least as of 1989) determining elevation angle was very difficult for ATC primary radar.  It was possible by cross-correlating information from multiple feeds, but that this was not routinely done.  The document focuses on how useful that would be for helping to remove ground clutter.

Even if some elevation information were available, that data might not be presented to controllers unless it were of a useful precision.  If the precision were worse than say 1500 feet, would that be useful?  


  Besides, military radars can and do provide altitude information for primary targets


Radartutorial suggests that vertical discrimination (or 3D radar) requires extra equipment and is therefore more expensive.  Since ATC can get this information by secondary radar, the expense of gathering it via a 3D primary system is avoided.

Besides cost, older 3D radar would scan a region more slowly than a 2D radar.