<p>Why does UDP have a length field in the header and TCP does not?</p>

<p>I am guessing that the length of the segment in TCP is inferred from the IP header but one should be able to do the same for a UDP datagram</p>

There is a 96 bit pseudo header conceptually prefixed to the TCP header that contains the information already.
The checksum field description from
this source
gives the answer:
Checksum: 16 bits
The checksum field is the 16 bit one's complement of the one's
  complement sum of all 16 bit words in the header and text.  If a
  segment contains an odd number of header and text octets to be
  checksummed, the last octet is padded on the right with zeros to
  form a 16 bit word for checksum purposes.  The pad is not
  transmitted as part of the segment.  While computing the
  checksum,
  the checksum field itself is replaced with zeros.
The checksum also covers a 96 bit pseudo header conceptually
  prefixed to the TCP header.  This pseudo header contains the Source
  Address, the Destination Address, the Protocol, and TCP length.
  This gives the TCP protection against misrouted segments.  This
  information is carried in the Internet Protocol and is transferred
  across the TCP/Network interface in the arguments or results of
  calls by the TCP on the IP.
```
```
+--------+--------+--------+--------+
      |           Source Address          |
      +--------+--------+--------+--------+
      |         Destination Address       |
      +--------+--------+--------+--------+
      |  zero  |  PTCL  |    TCP Length   |
      +--------+--------+--------+--------+
```
```
The information is not needed at the TCP level since TCP is a stream based protocol.